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

Opencv学习 Canny加滚动条

2013-06-02 17:14 148 查看
参考opencv教程基础篇的 第五章的代码 记录一下以备后用
#include "cvliblink.h"
#include <opencv2/opencv.hpp>

char windowsname[]="Edge";
char tbarname[]="Threshold";
int edge_thresh=1;

IplImage *image = 0;
IplImage *cedge = 0;
IplImage *gray = 0;
IplImage *edge = 0;

void on_trackbar(int handle)		//滚动条函数
{
cvSmooth(gray,edge,3,3,0);		//先平滑边缘检测效果好
cvNot(gray,edge);

cvCanny(gray,edge,(float)edge_thresh,(float)edge_thresh*3,3);	//因为canny的经典是最低阈值是最高阈值的1/3
cvZero(cedge);
cvCopy(image,cedge,edge);
cvShowImage(windowsname,cedge);
}

int main(int argc,char **argv)
{
//	char *filename = argc ==2?argv[1]:(char*)"1.bmp";
char *filename = argc ==2?argv[1]:(char*)"C:\\Users\\Public\\Pictures\\Sample Pictures\\perspective-quadrilateral-src-img.jpg";
//要说一下的是文件名最好是英文的,中文的可能会引发意想不到的问题
if ((image = cvLoadImage(filename,1))==0)
{
return -1;
}
cvNamedWindow("image");
cvShowImage("image",image);
cedge = cvCreateImage(cvGetSize(image),IPL_DEPTH_8U,3);
gray = cvCreateImage(cvGetSize(image),IPL_DEPTH_8U,1);
edge = cvCreateImage(cvGetSize(image),IPL_DEPTH_8U,1);
cvCvtColor(image,gray,CV_BGR2GRAY);

cvNamedWindow(windowsname,1);
cvCreateTrackbar(tbarname,windowsname,&edge_thresh,100,on_trackbar);
on_trackbar(0);

cvWaitKey(0);
cvReleaseImage(&image);
cvReleaseImage(&gray);
cvReleaseImage(&edge);
cvReleaseImage(&cedge);
cvDestroyWindow("image");
cvDestroyWindow(windowsname);

return 0;
}

效果图如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: