filter.c
来自「于仕琪的OpenCV基础+教程的程序实例」· C语言 代码 · 共 150 行
C
150 行
// Filtering for Image with variaty filtering kernel//// CV_PREWITT_3x3_V A gradient filter (vertical Prewitt operator).// -1 0 1// -1 0 1// -1 0 1// CV_PREWITT_3x3_H A gradient filter (horizontal Prewitt operator).// 1 1 1// 0 0 0// -1 -1 -1// CV_SOBEL_3x3_V A gradient filter (vertical Sobel operator).// -1 0 1// -2 0 2// -1 0 1// CV_SOBEL_3x3_H A gradient filter (horizontal Sobel operator).// 1 2 1// 0 0 0// -1 -2 -1// CV_LAPLACIAN_3x3 A 3x3 Laplacian highpass filter.// -1 -1 -1// -1 8 -1// -1 -1 -1// CV_LAPLACIAN_3x3 A 3x3 Laplacian highpass filter (another kernel)// This kernel is similar with function: cvLaplace with aperture_size=1// 0 1 0// 1 -4 1// 0 1 0 注:直接用cvFilter2D得到的结果与用cvLaplace得到的结果// 略有不同// CV_LAPLACIAN_5x5 A 5x5 Laplacian highpass filter.// -1 -3 -4 -3 -1// -3 0 6 0 -3// -4 6 20 6 -4// -3 0 6 0 -3// -1 -3 -4 -3 -1// CV_GAUSSIAN_3x3 A 3x3 Gaussian lowpass filter.// This filter uses the kernel A/16,where// 1 2 1// A = 2 4 2// 1 2 1// These filter coefficients correspond to a 2-dimensional Gaussian// distribution with standard deviation 0.85.//// CV_GAUSSIAN_5x5 A 5x5 Gaussian lowpass filter.// This filter uses the kernel A/571,where// 2 7 12 7 2// 7 31 52 31 7// A = 12 52 127 52 12// 7 31 52 31 7// 2 7 12 7 2#include <cv.h>#include <highgui.h>#include <stdio.h>int main( int argc, char** argv ){ IplImage *src = 0;
IplImage *dst0 = 0,*dst1 = 0,*dst2 = 0,*dst3 = 0,*dst4 = 0,*dst5 = 0,*dst6 = 0;
float k0[9] = { -1.f/1, 0.f/1, 1.f/1,
-1.f/1, 0.f/1, 1.f/1,
-1.f/1, 0.f/1, 1.f/1}; //CV_PREWITT_3x3_V A gradient filter (vertical Prewitt operator).
float k1[9] = { 1.f/1,1.f/1, 1.f/1,
0.f/1, 0.f/1,0.f/1,
1.f/1, 1.f/1, 1.f/1}; //CV_PREWITT_3x3_H A gradient filter (horizontal Prewitt operator).
float k2[9] = { -1.f/1, 0.f/1, 1.f/1,
-2.f/1,0.f/1, 2.f/1,
-1.f/1, 0.f/1, 1.f/1}; // CV_SOBEL_3x3_V A gradient filter (vertical Sobel operator).
float k3[9] = { 1.f/1, 2.f/1,1.f/1,
0.f/1, 0.f/1, 0.f/1,
-1.f/1, -2.f/1, -1.f/1}; //CV_SOBEL_3x3_H A gradient filter (horizontal Sobel operator).
float k4[9] = { -1.f/1, -1.f/1, -1.f/1,
-1.f/1,8.f/1, -1.f/1,
-1.f/1, -1.f/1, -1.f/1}; //CV_LAPLACIAN_3x3 A 3x3 Laplacian highpass filter.
float k5[9] = { 0.f/1, 1.f/1, 0.f/1,
1.f/1,-4.f/1, 1.f/1,
0.f/1, 1.f/1, 0.f/1}; //This kernel is similar with function: cvLaplace with aperture_size=1
float k6[9] = { 1.f/16, 2.f/16, 1.f/16, 2.f/16, 4.f/16, 2.f/16, 1.f/16, 2.f/16, 1.f/16}; // 这里高斯核滤波器归一化
CvMat Km0,Km1,Km2,Km3,Km4,Km5,Km6; //cvInitMatHeader( &Km, 3, 3, CV_32FC1, k, CV_AUTOSTEP );
Km0 = cvMat( 3, 3, CV_32F, k0 );
Km1 = cvMat( 3, 3, CV_32F, k1 );
Km2 = cvMat( 3, 3, CV_32F, k2 );
Km3 = cvMat( 3, 3, CV_32F, k3 );
Km4 = cvMat( 3, 3, CV_32F, k4 );
Km5 = cvMat( 3, 3, CV_32F, k5 );
Km6 = cvMat( 3, 3, CV_32F, k6 );
// 0: force to gray image src = cvLoadImage("lena.jpg", 0); dst0 = cvCloneImage( src );
dst1 = cvCloneImage( src );
dst2 = cvCloneImage( src );
dst3 = cvCloneImage( src );
dst4 = cvCloneImage( src );
dst5 = cvCloneImage( src );
dst6 = cvCloneImage( src );
cvNamedWindow("src", 0); cvShowImage("src",src); cvNamedWindow("filtering0", 1);
cvNamedWindow("filtering1", 0);
cvNamedWindow("filtering2", 0);
cvNamedWindow("filtering3", 0);
cvNamedWindow("filtering4", 0);
cvNamedWindow("filtering5", 0);
cvNamedWindow("filtering6", 0);
cvFilter2D( src, dst0, &Km0, cvPoint(-1,-1));
cvFilter2D( src, dst1, &Km1, cvPoint(-1,-1));
cvFilter2D( src, dst2, &Km2, cvPoint(-1,-1));
cvFilter2D( src, dst3, &Km3, cvPoint(-1,-1));
cvFilter2D( src, dst4, &Km4, cvPoint(-1,-1));
cvFilter2D( src, dst5, &Km5, cvPoint(-1,-1));
cvFilter2D( src, dst6, &Km6, cvPoint(-1,-1));
cvShowImage("filtering0",dst0);
cvShowImage("filtering1",dst1);
cvShowImage("filtering2",dst2);
cvShowImage("filtering3",dst3);
cvShowImage("filtering4",dst4);
cvShowImage("filtering5",dst5);
cvShowImage("filtering6",dst6); cvWaitKey(0); cvReleaseImage( &src );
cvReleaseImage( &dst0 ); cvReleaseImage( &dst1 );
cvReleaseImage( &dst2 );
cvReleaseImage( &dst3 );
cvReleaseImage( &dst4 );
cvReleaseImage( &dst5 );
cvReleaseImage( &dst6 ); return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?