1OpenCV图像的边缘检测
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1OpenCV图像的边缘检测相关的知识,希望对你有一定的参考价值。
这里使用Canny函数进行边缘检测
函数定义:
void cvCanny( const CvArr* image,CvArr* edges,double threshold1,double threshold2, int aperture_size=3 );
参数说明:
image //输入单通道图像(可以是彩色图像)对于多通道的图像可以用cvCvtColor()修改。 edges //输出的边缘图像 ,也是单通道的,但是是黑白的 threshold1 //第一个阈值 threshold2 //第二个阈值,当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。 aperture_size Sobel //算子内核大小
1、创建用于显示原图像和输出图像的窗口
1 cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE); 2 cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE);
2、读取原图像
1 IplImage* img_rgb = cvLoadImage("E:\\test.jpg");
3、创建灰度图像的文件结构
1 IplImage* img_gray = cvCreateImage(cvSize(img_rgb->width, img_rgb->height), 2 img_rgb->depth, 3 1 4 );
4、将RGB原图像转换为灰度图像
1 cvCvtColor(img_rgb, img_gray, CV_BGR2GRAY);
5、对灰度图进行边缘检测,并保存到一个图像文件
1 IplImage* img_cny = doCanny(img_gray, 90, 150, 3);
6、释放图像内存
1 cvReleaseImage(&img_rgb); 2 cvReleaseImage(&img_gray); 3 cvReleaseImage(&img_cny);
7、关闭窗口
1 cvDestroyWindow("Example1"); 2 cvDestroyWindow("Example2");
完整代码:
1 /************************************************************************/ 2 /* Canny边缘检测 */ 3 /************************************************************************/ 4 #include "cv.h" 5 #include "highgui.h" 6 7 IplImage* doCanny( 8 IplImage* in, 9 double lowThresh, 10 double highThresh, 11 double aperture 12 ) 13 { 14 //Canny只能处理灰度图 15 if (in->nChannels != 1) 16 return 0; 17 18 IplImage* out = cvCreateImage( 19 cvGetSize(in), 20 in->depth, 21 1 22 ); 23 24 cvCanny(in, out, lowThresh, highThresh, aperture); 25 26 return out; 27 28 } 29 30 int main(int argc, char** argv) 31 { 32 cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE); 33 cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE); 34 35 IplImage* img_rgb = cvLoadImage("E:\\test.jpg"); 36 IplImage* img_gray = cvCreateImage(cvSize(img_rgb->width, img_rgb->height), 37 img_rgb->depth, 38 1 39 ); 40 41 cvCvtColor(img_rgb, img_gray, CV_BGR2GRAY); 42 43 IplImage* img_cny = doCanny(img_gray, 90, 150, 3); 44 45 cvShowImage("Example1", img_gray); 46 cvShowImage("Example2", img_cny); 47 48 cvWaitKey(0); 49 50 cvReleaseImage(&img_rgb); 51 cvReleaseImage(&img_gray); 52 cvReleaseImage(&img_cny); 53 54 cvDestroyWindow("Example1"); 55 cvDestroyWindow("Example2"); 56 57 return 0; 58 }
以上是关于1OpenCV图像的边缘检测的主要内容,如果未能解决你的问题,请参考以下文章
matlab图像如何用代码完成图像的分割、边缘检测和拼接的任务?
图像边缘检测基于matlab Zernike矩亚像素边缘检测含Matlab源码 1536期