#include "cv.h"
#include "highgui.h"
/*canny检测中的高低阈值*/
double lowthresh = 0;
double highthresh[] = { 25, 75, 125, 175, 225 };
/*canny检测中高低阈值的比例*/
double prop[] = { 1.5, 2.75, 4 };
int main()
{
/*以固定路径载入源图像*/
const char* road_sorce = "E:\\软件生成文件\\Visual Studio 2012 文件\\Learning OpenCV\\picture_3.jpg";
IplImage* img_sorce = cvLoadImage( road_sorce );
if (!img_sorce)
{
return -1;
}
/*以源图像的尺寸、数据深度生成三个单通道图像*/
IplImage* img_canny_1 = cvCreateImage( cvGetSize(img_sorce), img_sorce->depth, 1 );
IplImage* img_canny_2 = cvCreateImage( cvGetSize(img_sorce), img_sorce->depth, 1 );
IplImage* img_canny_3 = cvCreateImage( cvGetSize(img_sorce), img_sorce->depth, 1 );
/*生成窗口*/
cvNamedWindow( "img_sorce", CV_WINDOW_NORMAL );
cvNamedWindow( "img_canny_1.5", CV_WINDOW_NORMAL );
cvNamedWindow( "img_canny_2.75", CV_WINDOW_NORMAL );
cvNamedWindow( "img_canny_4", CV_WINDOW_NORMAL );
cvShowImage( "img_sorce", img_sorce );
/*for循环,循环5次,每次循环对应不同的highthresh值*/
for (int i=0; i<5; i++)
{
lowthresh = highthresh[i]/prop[0]; //lowthresh为highthresh值除以比例
printf( "highthresh = %f, lowthresh = %f\n", highthresh[i], lowthresh ); //每次循环显示
cvCanny( img_sorce, img_canny_1, lowthresh, highthresh[i] );
cvShowImage( "img_canny_1.5", img_canny_1 );
lowthresh = highthresh[i]/prop[1];
cvCanny( img_sorce, img_canny_2, lowthresh, highthresh[i] );
cvShowImage( "img_canny_2.75", img_canny_2 );
lowthresh = highthresh[i]/prop[2];
cvCanny( img_sorce, img_canny_3, lowthresh, highthresh[i] );
cvShowImage( "img_canny_4", img_canny_3 );
cvWaitKey(0); //每次循环停在此处等待按键,按下后再执行下一循环
}
cvReleaseImage( &img_sorce );
cvReleaseImage( &img_canny_1);
cvReleaseImage( &img_canny_2 );
cvReleaseImage( &img_canny_3 );
cvDestroyAllWindows();
return 0;
}