标签:
《学习OpenCV》中文版第5章第1题
题目要求 |
a程序代码 |
b程序代码 |
c程序代码 |
结果图片 |
注:相对书中的要求有扩充、调整
载入一个带有有趣纹理的图像。
a、使用cvSmooth函数以多种方法平滑图像
b、使用对称的平滑窗口,大小依次为3×3、5×5、9×9和11×11,并显示出结果
c、用5×5高斯滤波器平滑图像两次和用两个11×11平滑器平滑一次的输出结果是接近相同的吗?为什么?
d、对比不同平滑方法的处理效果,并查阅资料,找出处理效果的不同及各自的优势
1 // OpenCVExerciseTesting.cpp : 定义控制台应用程序的入口点。 2 // 3 //D:\\Work\\Work_Programming\\Source\\Image\\lena.jpg 4 5 6 #include "stdafx.h" 7 #include <cv.h> 8 #include <highgui.h> 9 #include <iostream> 10 using namespace cv; 11 using namespace std; 12 //函数声明-->--->-->--->-->--->-->--->// 13 14 15 16 //<--<--<--<--<--<--<--<--<--函数声明// 17 18 int _tmain(int argc, _TCHAR* argv[]) 19 { 20 const char * fileName = "D:\\Work\\Work_Programming\\Source\\Image\\纹理\\纹理_灰度.jpg"; 21 22 IplImage * img = cvLoadImage(fileName, CV_LOAD_IMAGE_UNCHANGED); 23 assert(img); 24 25 IplImage * dst = cvCloneImage(img); 26 //dst->origin = img->origin; 27 cvZero(dst); 28 29 cvNamedWindow("ExerciseWindow", 0); 30 cvNamedWindow("简单模糊", 0); 31 cvNamedWindow("简单无缩放模糊", 0); 32 cvNamedWindow("中值滤波器模糊", 0); 33 cvNamedWindow("高斯模糊", 0); 34 cvNamedWindow("双边滤波", 0); 35 36 cvShowImage("ExerciseWindow", img); 37 38 //---------------------------简单模糊:开始--------------------------------// 39 40 cvSmooth(img, dst, CV_BLUR, 5); 41 42 /*int i = 0; 43 while (i<5) 44 { 45 cvSmooth(dst, dst, CV_BLUR, 5); 46 i++; 47 }*/ 48 cvShowImage("简单模糊", dst); 49 50 51 //---------------------------简单模糊:结束--------------------------------// 52 53 //---------------------------简单无缩放模糊:开始--------------------------------// 54 55 //注意:使用CV_BLUR_NO_SCALE平滑类型,输入图像和输出图像必须有不同的数据精度 56 IplImage * blur_NO_Scale = cvCreateImage(cvSize(img->width, img->height), IPL_DEPTH_16S, img->nChannels); 57 blur_NO_Scale->origin = img->origin; 58 cvZero(blur_NO_Scale); 59 60 cvSmooth(img, blur_NO_Scale, CV_BLUR_NO_SCALE, 5); 61 62 cvShowImage("简单无缩放模糊", blur_NO_Scale); 63 64 //---------------------------简单无缩放模糊:结束--------------------------------// 65 66 //---------------------------中值滤波器:开始--------------------------------// 67 68 //注意:CV_MEDIAN平滑类型不支持in place方式 69 IplImage * image_Median = cvCloneImage(img); 70 cvZero(image_Median); 71 72 cvSmooth(img, image_Median, CV_MEDIAN, 5); 73 74 cvShowImage("中值滤波器模糊", image_Median); 75 76 //---------------------------中值滤波器:结束--------------------------------// 77 78 //---------------------------高斯模糊:开始--------------------------------// 79 80 IplImage * image_Gauss = cvCloneImage(img); 81 cvZero(image_Gauss); 82 83 cvSmooth(img, image_Gauss, CV_GAUSSIAN, 5,5,3,3); 84 85 cvShowImage("高斯模糊", image_Gauss); 86 87 //---------------------------高斯模糊:结束--------------------------------// 88 89 //---------------------------双边滤波:开始--------------------------------// 90 91 //特别注意:CV_BILATERAL平滑类型的输入和输出图像必须是8u,也就是灰度图 92 //因该平滑类型不支持in place方式,故多次平滑时注意增加临时图像 93 94 /*IplImage * img_Gray = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1); 95 IplImage * image_BIL = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1); 96 cvCvtColor(img, img_Gray, CV_BGR2GRAY);*/ 97 IplImage * image_BIL = cvCloneImage(img); 98 99 IplImage * temp_image = cvCloneImage(img); 100 cvZero(temp_image); 101 102 cvSmooth(img, temp_image, CV_BILATERAL, 3, 3, 11, 11); 103 104 int j = 0; 105 while (j<100) 106 { 107 //注意:使用CV_BILATERAL平滑类型时cvSmooth参数中的最后两个11 108 cvSmooth(temp_image, image_BIL, CV_BILATERAL, 7, 7, 11, 11); 109 //cvSmooth(temp_image, image_BIL, CV_BILATERAL, 3, 3); 110 111 cvCopyImage(image_BIL, temp_image); 112 j++; 113 } 114 115 //cvSmooth(img, image_BIL, CV_BILATERAL, 3, 3,11,11); 116 117 cvShowImage("双边滤波", image_BIL); 118 119 //---------------------------双边滤波:结束--------------------------------// 120 121 cvWaitKey(0); 122 123 cvReleaseImage(&img); 124 cvReleaseImage(&dst); 125 cvReleaseImage(&blur_NO_Scale); 126 cvReleaseImage(&image_Median); 127 cvReleaseImage(&image_Gauss); 128 cvReleaseImage(&image_BIL); 129 130 cvDestroyWindow("ExerciseWindow"); 131 cvDestroyWindow("简单模糊"); 132 cvDestroyWindow("简单无缩放模糊"); 133 cvDestroyWindow("中值滤波器模糊"); 134 cvDestroyWindow("高斯模糊"); 135 cvDestroyWindow("双边滤波"); 136 137 return 0; 138 } 139
接下来:
保持双边滤波器的处理图像
【练习5.1】使用cvSmooth测试不同平滑处理方法的效果以及不同的平滑窗口对处理效果的影响
标签:
原文地址:http://www.cnblogs.com/tingshuixuan2012/p/4426307.html