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 + -
显示快捷键?