opencv 4 边缘检测

来源:互联网 发布:mac更换登录帐号 编辑:程序博客网 时间:2024/06/06 13:36

使用OpenCv采集图像及图像边缘检测

 

边缘检测就是对采集到的图像进行处理,得到一幅显示边缘轮廓的图像,以便后续的处理与利用。

 

使用函数cvCanny:

void cvCanny( const CvArr* image, CvArr* edges, doublethreshold1, double threshold2, int aperture_size=3 );

image

单通道输入图像.

edges

单通道存储边缘的输出图像

threshold1

第一个阈值

threshold2

第二个阈值

aperture_size

Sobel 算子内核大小 (见 cvSobel).

函数 cvCanny 采用 CANNY 算法发现输入图像的边缘而且在输出图像中标识这些边缘。threshold1和threshold2 当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。

 

注意:cvCanny只接受单通道图像作为输入。

 

实现代码如下:

1.                          #include <stdio.h>  

2.                          #include <stdlib.h>  

3.                          #include <opencv/highgui.h>  

4.                          #include <opencv/cv.h>  

5.                            

6.                          int main()  

7.                          {  

8.                              IplImage* img;  

9.                              IplImage* src;  

10.                             IplImage* dst;  

11.                           

12.                             CvCapture* cam = cvCreateCameraCapture(0);//初始化摄像头  

13.                             cvSetCaptureProperty(cam, CV_CAP_PROP_FRAME_WIDTH, 640);//设置图像宽  

14.                             cvSetCaptureProperty(cam, CV_CAP_PROP_FRAME_HEIGHT,480);//设置图像高  

15.                           

16.                             img = cvQueryFrame(cam);//获取一帧图像  

17.                             src = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);//用所获图像创建8位、单通道图像  

18.                             cvConvertImage(img, src, 0);  

19.                             dst = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);//用所获图像创建8位、单通道图像  

20.                           

21.                             cvCanny(src, dst, 50, 100, 3);//边缘检测  

22.                           

23.                             cvNamedWindow("Test", CV_WINDOW_AUTOSIZE);  

24.                             cvNamedWindow("Out",  CV_WINDOW_AUTOSIZE);  

25.                           

26.                             cvShowImage("Test", img);//显示原图像  

27.                             cvShowImage("Out", dst);//边缘检测后的图像  

28.                             cvSaveImage("out.jpg", dst, 0);//保存  

29.                             cvWaitKey(0);  

30.    

31.      cvReleaseImage(&img);  

32.      cvReleaseImage(&src);  

33.      cvReleaseImage(&dst);  

34.      cvDestroyWindow("Test");  

35.      cvDestroyWindow("Out");  

36.  

37.   

 


cvCanny函数生成的轮廓

 

 

 

 

 

 

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   

 

 

 

 

 

 

































拉普拉斯变换生成的轮廓图

 

 

  

 

 

  

原创粉丝点击