// RGB_Gray_Canny.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include
#include
#include
#include
using namespace std;
//声明图像 IplImage 指针
IplImage* pSrcImg=NULL;
IplImage* pGrayImg = NULL;
IplImage* pCannyImg = NULL;
int Thresh=50;
//滑动条响应函数
void onTrackerSlid(int thresh)
{
cvCanny(pGrayImg, pCannyImg,(float)thresh,(float)thresh*3, 3);
cvShowImage( "Canny Image", pCannyImg );
}
int main( int argc, char** argv )
{
if(argc!=2)
argv[1]="lena.jpg";
//载入图像,强制转化为 Gray
if((pSrcImg = cvLoadImage( argv[1],1)) != 0 )
{
cout<<"Press ESC to Quit"<pCannyImg = cvCreateImage(cvGetSize(pGrayImg),IPL_DEPTH_8U,1);
//cvCanny(pGrayImg, pCannyImg, 150,50, 3);
//创建窗口
cvNamedWindow( "Source Image", CV_WINDOW_AUTOSIZE);
cvNamedWindow( "Gray Image",CV_WINDOW_AUTOSIZE);
cvNamedWindow( "Canny Image",CV_WINDOW_AUTOSIZE);
//添加滑动条来调节边缘检测的阈值
cvShowImage( "Gray Image", pCannyImg);
cvCreateTrackbar("Threshold", "Canny Image", &Thresh, 100, onTrackerSlid);
onTrackerSlid(Thresh);
//显示图像
cvShowImage( "Source Image", pSrcImg );
cvShowImage( "Gray Image",pGrayImg);
//保存图像
cvSaveImage( "Gray_Image.jpg",pGrayImg);
cvSaveImage( "Canny_Image.jpg",pCannyImg);
//等待按"ESC"键退出
while(1)
if(cvWaitKey(100)==27)
break;
//销毁窗口
//cvWaitKey(0);
cvDestroyWindow( "Source Image" );
cvDestroyWindow( "Canny Image" );
cvDestroyWindow( "Gray Image");
//释放图像
cvReleaseImage( &pGrayImg );
cvReleaseImage( &pCannyImg );
cvReleaseImage( &pSrcImg);
return 0;
}
return -1;
}