canny算子有两个阈值,上限和下限,构造函数定义为:
void cvCanny(const CvArr* img,CvArr* edges,double lowthreshold,double highthreshold,int apertureSize=3);
需要注意的是canny需要输入的是灰度图像,所以我们在使用canny之前要使用cvCvtColor将之转换为灰度图像,一下程序对高低阈值不同比例,不同大小进行设置来观察cvCanny的显示效果:
// TestCanny.cpp : 定义控制台应用程序的入口点。
// 设置canny中的阈值,对参数进行实验
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
int main(int argc,char** argv)
{
IplImage* src=cvLoadImage(argv[1],1);
IplImage* gray=cvCreateImage(cvSize(src->width,src->height),8,1);
IplImage* dst0=cvCreateImage(cvSize(src->width,src->height),8,1);
IplImage* dst1=cvCreateImage(cvSize(src->width,src->height),8,1);
IplImage* dst2=cvCreateImage(cvSize(src->width,src->height),8,1);
IplImage* dst3=cvCreateImage(cvSize(src->width,src->height),8,1);
cvCvtColor(src,gray,CV_RGB2GRAY);
cvCanny(gray,dst0,50,75,3);
cvCanny(gray,dst1,120,80,3);
cvCanny(gray,dst3,120,30,3);
cvCanny(gray,dst2,180,120,3);
cvNamedWindow("gray",0);
cvNamedWindow("dst0",0);
cvNamedWindow("dst1",0);
cvNamedWindow("dst2",0);
cvNamedWindow("dst3",0);
cvShowImage("gray",gray);
cvShowImage("dst0",dst0);
cvShowImage("dst1",dst1);
cvShowImage("dst2",dst2);
cvShowImage("dst3",dst2);
cvWaitKey(0);
cvReleaseImage(&gray);
cvReleaseImage(&dst0);
cvReleaseImage(&dst1);
cvReleaseImage(&dst2);
cvReleaseImage(&dst3);
cvDestroyWindow("gray");
cvDestroyWindow("dst0");
cvDestroyWindow("dst1");
cvDestroyWindow("dst2");
cvDestroyWindow("dst3");
}