/* Programa: convolucion.cpp Descripción: Calcula la convolución de una imagen con un Kernel, usando la librería de OpenCV Autor: FJHL Fecha Inicio: 22/Agosto/2016 */ #include #include #include int main(int argc, char *argv[]){ cv::Mat image_gray,Kernel,image_conv,image_corr,image_residual; int size_w = 7; //Leer la imagen original cv::Mat src = cv::imread("../../../images/flowers8.png"); //Convertir a escala de gris cv::cvtColor(src, image_gray, CV_RGB2GRAY); //Crear ventanas cv::namedWindow("Fuente", 0); cv::namedWindow("Imagen en escala de Grises", 0); cv::namedWindow("Imagen conrrelacionada", 0); cv::namedWindow("Imagen convolucionada", 0); cv::namedWindow("Imagen residual", 0); //Crear el kernel Kernel = cv::Mat::ones(size_w, size_w,CV_32FC(1))/(size_w*size_w); /*Kernel.at(0, 2) = 2.0; Kernel.at(0, 1) = -2.0;*/ //Aplicar correlación cv::filter2D(image_gray, image_corr, -1, Kernel, cv::Point(-1, -1), 0, 4); //Aplicar la convolución //Para convolucionar con filter2D, hay que girar el Kernel cv::flip(Kernel, Kernel,-1);//-1-->ambos ejes cv::filter2D(image_gray, image_conv, -1, Kernel, cv::Point(-1, -1), 0, 4); //residual entre las imagenes corr y conv image_residual = cv::abs(image_conv - image_corr); //Mostrar resultados cv::imshow("Fuente", src); //cv::flip(image_gray, image_gray, -1); cv::imshow("Imagen en escala de Grises", image_gray); //cv::imshow("Imagen con histograma ecualizado", image_eqh); cv::imshow("Imagen conrrelacionada", image_corr); cv::imshow("Imagen convolucionada", image_conv); cv::imshow("Imagen residual", image_residual); cv::waitKey(0); return(0); }