博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【练习6.2】cvFilter2D及3×3高斯核、cvFilter2D当使用一维核时anchor注意事项、float乘法除法注意事项...
阅读量:5212 次
发布时间:2019-06-14

本文共 4168 字,大约阅读时间需要 13 分钟。

 

提纲

 

 

 

  

 

题目要求:

 可分核。利用行[(1/16,2/16,1/16),(2/16,4/16,2/16),(1/16,2/16,1/16)]和在中间的参考点创建一个3*3的高斯核。

a、在一副图像上运行此核并且显示这个结果。 

b、现在创建参考点在中心的两个核:一个“交叉”(1/4,2/4,1/4),另一个下降(1/4,2/4,1/4)。载入相同的原始图像,利用cvFilter2D()对图像做两次卷积,第一次用第一个一维核,第二次用第二个一维核。描述结果。

针对b问中的描述,暂时理解为一行三列和三行一列的一维核

 

程序代码:

 

1 // OpenCVExerciseTesting.cpp : 定义控制台应用程序的入口点。  2 //  3 //D:\\Work\\Work_Programming\\Source\\Image\\lena.jpg  4   5   6 #include "stdafx.h"  7 #include 
8 #include
9 #include
10 11 #include
12 //#pragma comment(lib, "opencv_legacy2411.lib") 13 14 using namespace cv; 15 using namespace std; 16 17 //函数声明-->--->-->--->-->--->-->--->// 18 19 20 //<--<--<--<--<--<--<--<--<--函数声明// 21 22 int _tmain(int argc, _TCHAR* argv[]) 23 { 24 const char * soutceFile = "D:\\Work\\Work_Programming\\Source\\Image\\OpenCVExerciseImage\\第5章\\RCA_Indian_Head_test_pattern.jpg"; 25 IplImage * image_Resource = cvLoadImage(soutceFile, CV_LOAD_IMAGE_UNCHANGED); 26 assert(image_Resource); 27 28 cvNamedWindow("原始图像", 0); 29 cvNamedWindow("题目_a", 0); 30 cvNamedWindow("题目_b", 0); 31 32 IplImage * image_Gray = cvCreateImage(cvSize(image_Resource->width, image_Resource->height), IPL_DEPTH_8U, 1); 33 34 //使用cvCvtColor和cvCopy这些函数前,都应该对参数进行验证再使用 35 if (image_Resource->nChannels == 3) 36 { 37 cvCvtColor(image_Resource, image_Gray, CV_RGB2GRAY); 38 } 39 else 40 { 41 image_Gray = cvCloneImage(image_Resource); 42 } 43 44 cvShowImage("原始图像", image_Gray); 45 46 //---------------------------a:--------------------------------/: 47 48 //●●●●●●●●●●●●●●●●●●●/: 49 //使用下面的形式,结果是错误的,因为1/16的结果是0.000000000,必须这样才行,那就不如下面的方式 50 //float matData[9] = { 51 // (1 / 16), (2 / 16), (1 / 16), 52 // (2 / 16), (4 / 16), (2 / 16), 53 // (1 / 16), (2 / 16), (1 / 16) 54 //}; 55 //●●●●●●●●●●●●●●●●●●●/。 56 57 float atomValue = (float)1 / (float)16; 58 float multiplier_2 = 2.0f; 59 float multiplier_4 = 4.0f; 60 61 float matData[9] = { 62 atomValue, atomValue*multiplier_2, atomValue, 63 atomValue * multiplier_2, atomValue * multiplier_4, atomValue * multiplier_2, 64 atomValue, atomValue * multiplier_2 , atomValue 65 }; 66 67 CvMat mat = cvMat(3, 3, CV_32FC1, matData); 68 69 IplImage * image_Result_a = cvCloneImage(image_Gray); 70 cvZero(image_Result_a); 71 72 cvFilter2D(image_Gray, image_Result_a, &mat); 73 cvShowImage("题目_a", image_Result_a); 74 75 //---------------------------a:--------------------------------/。 76 77 //---------------------------b:--------------------------------/: 78 79 IplImage *image_Result_b = cvCloneImage(image_Gray); 80 cvZero(image_Result_b); 81 82 atomValue = (float)1 / (float)4; 83 84 CvMat *mat_b = cvCreateMat(1, 3, CV_32FC1); 85 cvmSet(mat_b, 0, 0, atomValue); 86 cvmSet(mat_b, 0, 1, atomValue * multiplier_2); 87 cvmSet(mat_b, 0, 2, atomValue); 88 89 CvMat* mat_b_2 = cvCreateMat(3, 1, CV_32FC1); 90 cvmSet(mat_b_2, 0, 0, atomValue); 91 cvmSet(mat_b_2, 1, 0, atomValue * 2); 92 cvmSet(mat_b_2, 2, 0, atomValue); 93 94 cvFilter2D(image_Gray, image_Result_b, mat_b); 95 cvFilter2D(image_Result_b, image_Result_b, mat_b_2); 96 97 cvShowImage("题目_b", image_Result_b); 98 99 //---------------------------b:--------------------------------/。100 101 cvWaitKey(0);102 103 cvReleaseImage(&image_Resource);104 cvReleaseImage(&image_Result_a);105 cvReleaseImage(&image_Result_b);106 cvReleaseMat(&mat_b);107 cvReleaseMat(&mat_b_2);108 109 cvDestroyWindow("原始图像");110 cvDestroyWindow("题目_a");111 cvDestroyWindow("题目_b");112 113 return 0;114 }

 

 

结果图片:

 

要言妙道:

 ①int型相除如果想得的float,必须提前强转,例如: float atomValue = (float)1 / (float)16; 

②使用cvFliter2D的时候,如果使用的是一位和,则anchor的值只能使用默认值,即cvPoint(-1,-1),如果想自定义,会报错,但测试3×3核时,自定义anchor运行正常,例如上述代码中b部分的  cvFilter2D(image_Gray, image_Result_b, mat_b); 如果更改为 cvFilter2D(image_Gray, image_Result_b, mat_b,cvPoint(0,2)); ,则报错

 

转载于:https://www.cnblogs.com/tingshuixuan2012/p/4464287.html

你可能感兴趣的文章
第九周作业
查看>>
如何通过命令行窗口查看sqlite数据库文件
查看>>
整理一下 编码、解码库
查看>>
imx6 uboot logo 更改
查看>>
微信小程序:block的隐藏
查看>>
What's blocking my lock?
查看>>
android之权限大全
查看>>
inotify事件监控工具
查看>>
JavaScript基础整理(1)
查看>>
软件工程第二次作业
查看>>
【转】Python爬虫(7)_scrapy-redis
查看>>
Css嵌套DIV,内层DIV设置margin-top失效的解决办法(转)
查看>>
线程属性相关函数与操作
查看>>
Weblogic的安装与配置
查看>>
李朋举第三次作业
查看>>
【题解】格子游戏
查看>>
laravel中ubuntu下执行php artisan migrate总是报错
查看>>
Liux下重启php
查看>>
求一维数组的最大子数组2(结对开发)
查看>>
纯css实现二级导航菜单效果,通过简单的鼠标事件操作页面元素样式变换实现二级导航菜单的功能,非常简单实用,...
查看>>