Canny图像边缘检测算法原理详见http://blog.youkuaiyun.com/xiajun07061225/article/details/6926108
编程实现:安装Visual C++ 6.0和opencv1.0版本(必须是1.0)
1、在VC6.0中配置OpenCV运行环境全局设置菜单Tools->Options->Directories:先设置lib路径,选择Library files,在下方填入路径: C:\Program Files\OpenCV\lib然后选择include files,在下方填入路径: C:\Program Files\OpenCV\cxcore\includeC:\Program Files\OpenCV\cv\includeC:\Program Files\OpenCV\cvaux\includeC:\Program Files\OpenCV\ml\includeC:\Program Files\OpenCV\otherlibs\highguiC:\Program Files\OpenCV\otherlibs\cvcam\include然后选择source files,在下方填入路径: C:\Program Files\OpenCV\cv\srcC:\Program Files\OpenCV\cxcore\srcC:\Program Files\OpenCV\cvaux\srcC:\Program Files\OpenCV\otherlibs\highguiC:\Program Files\OpenCV\otherlibs\cvcam\src\windows2、创建空的控制台项目 在visual c++6.0中建立console application工程,win32平台。将 shanyang.jpg文件放在项目文件夹下。3、在项目中添加Lib库菜单:Project->Settings,然后将Setting for选为All Configurations,然后选择右边的link标签,在Object/library modules附加上cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib3、添加文件Ex2.cpp4、编译、运行5、拖动控制条查看不同门限时图像边缘检测结果。
#include "stdafx.h"#include "cv.h"#include "cxcore.h"#include "highgui.h"
char wndname[] = "图像边缘检测-CANNY";char tbarname[] = "门限控制"; IplImage *image = 0, *cedge = 0, *gray = 0, *edge = 0; // define a trackbar callbackvoid on_trackbar(int h){ //平滑处理 cvSmooth( gray, edge, CV_BLUR, 3, 3, 0, 0 ); // Canny边缘检测 cvCanny(gray, edge, (float)h, (float)h*3, 3); ///清除上一轮数据 cvZero( cedge ); // 复制 cvCopy( image, cedge, edge ); // 显示图像 cvShowImage(wndname, cedge);} int main( int argc, char** argv ){ char* filename = argc == 2 ? argv[1] : (char*)"shanyang.jpg"; int edge_thresh = 1; if( (image = cvLoadImage( filename, 1)) == 0 ) return 0; // 创建输出图像 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_BGR2GRAY); // 创建显示窗口 cvNamedWindow(wndname, 1); // 创建控制条 cvCreateTrackbar(tbarname, wndname, &edge_thresh, 255, on_trackbar); // 显示图像 on_trackbar(0); cvWaitKey(0);// 等待拖动,自动触发on_trackbar()
cvReleaseImage(&image); cvReleaseImage(&gray); cvReleaseImage(&edge);///释放内存 cvDestroyWindow(wndname); return 1;}
【数字图像处理】Canny图像边缘检测算法VC6.0+OpenCV实现
最新推荐文章于 2016-04-28 14:33:09 发布