opencv的边缘检测算法有很多种,这里介绍最常见到的一种,函数原型如下:
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 当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。
下面是一个边缘检测案例代码:
/************************************************** * cvCanny:Canny边缘检测 **************************************************/ /*********************************************************************** * OpenCV example * By Shiqi Yu 2006 ***********************************************************************/ #include "cv.h" #include "cxcore.h" #include "highgui.h" int main( int argc, char** argv ) { //声明IplImage指针 IplImage* pImg = NULL; IplImage* pCannyImg = NULL; //载入图像,强制转化为Gray if( argc == 2 && (pImg = cvLoadImage( argv[1], 0)) != 0 ) { //为canny边缘图像申请空间 pCannyImg = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1); //canny边缘检测 cvCanny(pImg, pCannyImg, 50, 150, 3); //创建窗口 cvNamedWindow("src", 1); cvNamedWindow("canny",1); //显示图像 cvShowImage( "src", pImg ); cvShowImage( "canny", pCannyImg ); cvWaitKey(0); //等待按键 //销毁窗口 cvDestroyWindow( "src" ); cvDestroyWindow( "canny" ); //释放图像 cvReleaseImage( &pImg ); cvReleaseImage( &pCannyImg ); return 0; } return -1; }
图片就不贴了,太晚了,改天再补上。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/241679.html