您的位置:首页 > 运维架构

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

2014-04-04 22:19 701 查看
边缘检测就是对采集到的图像进行处理,得到一幅显示边缘轮廓的图像,以便后续的处理与利用。

使用函数cvCanny:

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


image单通道输入图像.edges单通道存储边缘的输出图像threshold1第一个阈值threshold2第二个阈值aperture_sizeSobel 算子内核大小 (见 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");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: