opencv 4 边缘检测

本文介绍了如何使用OpenCV在树莓派上进行图像边缘检测。通过调用cvCanny函数,结合两个阈值和Sobel算子,从摄像头捕获的图像中提取边缘,并展示结果。此外,还提供了完整的C++代码示例。
摘要由CSDN通过智能技术生成

使用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函数生成的轮廓

 

 

 

 

 

 

 

 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
 

 

 

 

 

 

 

































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

 

 

 
 

 

 

 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值