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

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


使用函数cvCanny:

void cvCanny( const CvArr* image, CvArr* edges, double threshold1, double threshold2, int aperture_size=3 );
image
单通道输入图像.
edges
单通道存储边缘的输出图像
threshold1
第一个阈值
threshold2
第二个阈值
aperture_size
Sobel 算子内核大小 (见 cvSobel).

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


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


实现代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <opencv/highgui.h>
#include <opencv/cv.h>

int main()
{
	IplImage* img;
	IplImage* src;
	IplImage* dst;

	CvCapture* cam = cvCreateCameraCapture(0);//初始化摄像头
	cvSetCaptureProperty(cam, CV_CAP_PROP_FRAME_WIDTH, 640);//设置图像宽
	cvSetCaptureProperty(cam, CV_CAP_PROP_FRAME_HEIGHT,480);//设置图像高

	img = cvQueryFrame(cam);//获取一帧图像
	src = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);//用所获图像创建8位、单通道图像
	cvConvertImage(img, src, 0);
	dst = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);//用所获图像创建8位、单通道图像

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

	cvNamedWindow("Test", CV_WINDOW_AUTOSIZE);
	cvNamedWindow("Out",  CV_WINDOW_AUTOSIZE);

	cvShowImage("Test", img);//显示原图像
	cvShowImage("Out", dst);//边缘检测后的图像
	cvSaveImage("out.jpg", dst, 0);//保存
	cvWaitKey(0);

	cvReleaseImage(&img);
	cvReleaseImage(&src);
	cvReleaseImage(&dst);
	cvDestroyWindow("Test");
	cvDestroyWindow("Out");
}



  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值