《学习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; }
相关文章推荐
- 《学习OpenCV(中文版)》第4章 练习3a
- 《学习OpenCV》练习4-3
- 《学习OpenCV(中文版)》第4章 练习3b
- 《学习OpenCV》练习4-4
- 《学习OpenCV (中文版)》第2章 练习3和练习4
- 《学习OpenCV(中文版)》第4章 练习4
- 基于QT5的opencv学习之《学习opencv课后练习3-7》
- 《学习OpenCV》练习5-1
- 《学习OpenCV(中文版)》第4章 练习5a
- 《学习OpenCV》练习5-2
- 《学习OpenCV》练习5-4
- 《学习OpenCV》第四章练习答案1-b,1-c,2-a
- 《学习OpenCV》练习5-5
- 《学习OpenCV(中文版)》第4章 练习2
- 《学习OpenCV》练习5-11
- 《学习OpenCV》例2-3课后练习(page24)
- 《学习OpenCV》练习2-5
- 《学习OpenCV》练习6-5
- 《学习OpenCV》练习3-2
- 《学习OpenCV》练习6-7