您的位置:首页 > 运维架构

《学习OpenCV》练习6-2

2014-02-15 20:17 281 查看
#include "cv.h"
#include "highgui.h"

int main()
{
float a_kernel[] = { 1.0/16, 2.0/16, 1.0/16,
2.0/16, 4.0/16, 2.0/16,
1.0/16, 2.0/16, 1.0/16 };							//创建问题a中核的元素
float b_kernel_1[] = { 1.0/4, 2.0/4, 1.0/4,
0, 0, 0,
0, 0, 0 };										//创建问题b中第一个核的元素
float b_kernel_2[] = { 1.0/4, 0, 0,
2.0/4, 0, 0,
1.0/4, 0, 0 };									//创建问题b中第二个核的元素

CvMat a_matkernal;														//为每个核创建矩阵格式
CvMat b_matkernal_1;
CvMat b_matkernal_2;
a_matkernal = cvMat( 3, 3, CV_32F, a_kernel );							//根据数组内容创建3*3矩阵,数据类型跟数组一样是float
b_matkernal_1= cvMat( 3, 3, CV_32F, b_kernel_1 );
b_matkernal_2= cvMat( 3, 3, CV_32F, b_kernel_2 );

/*选择路径,载入源图像,并以源图像的尺寸大小、数据深度、通道数建立三幅图像,分别对应问题a与问题b*/
const char* image = "E:\\...\\picture_1.jpg";
IplImage* img_sorce = cvLoadImage( image );
IplImage* img_a = cvCreateImage( cvGetSize(img_sorce), img_sorce->depth, img_sorce->nChannels );
IplImage* img_b = cvCreateImage( cvGetSize(img_sorce), img_sorce->depth, img_sorce->nChannels );
if( !img_sorce )
{
return -1;
}

cvFilter2D( img_sorce, img_a, &a_matkernal );							//用高斯核a对源图像作一次高斯卷积,输出a
cvFilter2D( img_sorce, img_b, &b_matkernal_1 );							//用高斯核b1和b2对源图像作两次高斯卷积,输出b
cvFilter2D( img_b, img_b, &b_matkernal_2 );

/*创建窗口*/
cvNamedWindow( "img_sorce", CV_WINDOW_AUTOSIZE );
cvNamedWindow( "img_a", CV_WINDOW_AUTOSIZE );
cvNamedWindow( "img_b", CV_WINDOW_AUTOSIZE );
/*显示图像*/
cvShowImage( "img_sorce", img_sorce );
cvShowImage( "img_a", img_a );
cvShowImage( "img_b", img_b );
/*释放内存,销毁窗口*/
cvWaitKey(0);
cvReleaseImage( &img_sorce );
cvReleaseImage( &img_a );
cvReleaseImage( &img_b );
cvDestroyAllWindows();

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c opencv 图像处理 图形