#include "stdafx.h"
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#ifdef _CH_
#pragma package <opencv>
#endif
#ifndef _EiC
#include "cv.h"
#include "highgui.h"
#endif
char wndname[] = "Edge";
char tbarname[]= "Threshold";
IplImage * image=0,*cedge=0,*gray=0,*edge=0;
// define a trackbar callback
void on_trackbar(int h)
{
cvSmooth(gray,edge,CV_BLUR,3,3,0,0);
cvNot(gray,edge);
cvCanny(gray,edge,(float)h,(float)h*3,3);
cvZero(cedge);
cvCopy(image,cedge,edge);
cvShowImage(wndname,cedge);
};
int _tmain(int argc, _TCHAR* argv[])
{
char* filename=argc==2?argv[1]:(char*)"fruit.jpg";
int edge_thresh=1;
//将图像文件加载至内存。通过文件名确定被加载的文件的格式并且自动分配图像数据结构所需的内存
//cvLoadImage函数可以读取图像格式:BMP,DIB,JPEG,PNG,PBM,PGM,PPM,SR,RAS和TIFF。
if((image=cvLoadImage(filename,1))==0)
return -1;
cedge = cvCreateImage(cvSize(image->width,image->height),IPL_DEPTH_8U,3);
gray=cvCreateImage(cvSize(image->width,image->height),IPL_DEPTH_8U,1);
edge=cvCreateImage(cvSize(image->width,image->height),IPL_DEPTH_8U,1);
cvCvtColor(image,gray,CV_RGB2GRAY);
// Create a window
cvNamedWindow(wndname,1);
// create a toolbar
cvCreateTrackbar(tbarname,wndname,&edge_thresh,100,on_trackbar);
// Show the image
on_trackbar(0);
// Wait for a key stroke; the same function arranges events processing
cvWaitKey(0);
cvReleaseImage(&image);
cvReleaseImage(&gray);
cvReleaseImage(&edge);
cvDestroyWindow(wndname);
return 0;
}
#ifdef _EiC
main(1,"edge.c");
#endif
环境为OpenCV2.0,VS2008
运行结果为: