参考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;
}
效果图如下: