Red de conocimiento informático - Aprendizaje de programación - Función de escala de tamaño de procesamiento de imágenes OpenCV dopyrdown

Función de escala de tamaño de procesamiento de imágenes OpenCV dopyrdown

Debido a que algunas imágenes de salida tienen diferentes dimensiones, profundidad y número de canales que la imagen de entrada, no puede sobrescribir la imagen de entrada con la imagen de salida. Hay varias funciones contenedoras que son útiles a este respecto. Incluyen el trabajo de asignar memoria para la imagen de salida y realizar transformaciones como el procesamiento de imágenes al mismo tiempo.

Primero realice el escalado de grises en la imagen RGB original.

Luego use cvPyrDown() para crear una imagen con la mitad de la altura y la mitad del ancho de la imagen de entrada.

Finalmente, se genera una imagen de un solo canal (escala de grises) utilizando la detección de bordes Canny.

Entorno: WIN7 32bits VS2010 OpenCV2.2.0

El código es el siguiente:

#include "stdafx.h"

# incluir "cv .h"

#include lt;cxcore.hgt;

#include lt;cxcore.hgt;. highgui.hgt ;

/Primera función: función de procesamiento de escala

IplImage*doPyrDown(IplImage*in, int filter=IPL_GAUSSIAN_5x5){

afirmar (in- gt; ancho2 ==0 amp; in-gt; altura2==0);

IplImage* out=cvCreateImage(

cvSize(in-gt; ancho/ 2, in- gt ; altura/2),

in-gt; profundidad,

in-gt; nChannels

); largo y la mitad del ancho, la misma profundidad y el mismo número de canales

cvPyrDown(in, out

return(out)

}

// Segunda función: Detección de bordes Canny

IplImage* doCanny(IplImage* in, doble umbral bajo, doble umbral alto, doble apertura){

if( in -gt;nChannels!=1)

return(0); //Canny solo puede manejar imágenes en escala de grises

IplImage* out = cvCreateImage(

cvGetSize ( en ),

in-gt.profundidad, //IPL_DEPTH_8U,

1);

cvCanny (entrada, salida, umbral bajo, umbral alto, apertura) ;

// El segundo y tercer parámetro de la función son dos umbrales.

Se utiliza un umbral pequeño para controlar las conexiones de los bordes y un umbral grande para controlar la segmentación inicial de los bordes fuertes

return( out

}; p>int main( int argc, char** argv ){

cvNamedWindow("Ejemplo RGB", CV_ WINDOW_AUTOSIZE);

cvNamedWindow("Ejemplo gris", CV_WINDOW_AUTOSIZE);

cvNamedWindow("Ejemplo Pyr", CV_WINDOW_AUTOSIZE);

cvNamedWindow("Ejemplo Canny", CV_WINDOW_AUTOSIZE

IplImage* img_rgb = cvLoadImage("cube.jpg); "); //carga la imagen RBG original

IplImage*;

cvShowImage("Ejemplo RGB", img_rgb);

cvShowImage ("Ejemplo RGB", img_rgb ); //muestra la imagen RBG original

out = cvCreateImage( cvSize( img_rgb-gt; ancho, img_rgb-gt; alto), img_rgb-gt; profundidad, 1);

cvCvtColor(img_rgb, out, CV_BGR2GRAY); // Convierte la imagen cargada en una imagen en escala de grises

cvShowImage("Example Gray", out); /p>

out = doPyrDown( out );

out = doPyrDown( out ); // Realiza el proceso de reducción dos veces

cvShowImage("Ejemplo Pyr", out ) ; // Mostrar imagen de contracción

out = doCanny(out, 10, 100, 3); // Realizar detección de bordes Canny

cvShowImage("Ejemplo Canny", out); / Mostrar imagen de detección de bordes Canny

cvWaitKey(0);

cvReleaseImage(amp;out);

cvDestroyWindow("Ejemplo gris");

cvDestroyWindow ("Ejemplo Pyr");

cvDestroyWindow("Ejemplo Canny");

}

cvDestroyWindow("Ejemplo Pyr");

cvDestroyWindow("Ejemplo Canny");

}