《学习OpenCV》练习6-2

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值