从一个灰度图像得到二值图像的函数有:cvThreshold,cvAdaptiveThreshold和cvCanny。
采用 Canny 算法做边缘检测
void cvCanny( const CvArr* image, CvArr* edges, double threshold1,
double threshold2, int aperture_size=3 );
image
-
单通道输入图像.
edges
-
单通道存储边缘的输出图像
threshold1
-
第一个阈值
threshold2
-
第二个阈值
aperture_size
-
Sobel 算子内核大小 (见 cvSobel).
函数 cvCanny 采用 CANNY 算法发现输入图像的边缘而且在输出图像中标识这些边缘。threshold1和threshold2 当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。
- #include "StdAfx.h"
- #include "cv.h"
- #include "cxcore.h"
- #include "highgui.h"
- int main( int argc, char** argv )
- {
-
- IplImage* img = NULL;
- IplImage* cannyImg = NULL;
- char *filename;
- filename="f:\\3.jpg";
- img=cvLoadImage(filename,1);
-
- if((img = cvLoadImage(filename, 0)) != 0 )
- {
-
- cannyImg = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
-
- cvCanny(img, cannyImg, 50, 150, 3);
-
- cvNamedWindow("src", 1);
- cvNamedWindow("canny",1);
-
- cvShowImage( "src", img );
- cvShowImage( "canny", cannyImg );
- cvWaitKey(0);
-
- cvDestroyWindow( "src" );
- cvDestroyWindow( "canny" );
-
- cvReleaseImage( &img );
- cvReleaseImage( &cannyImg );
- return 0;
- }
- return -1;