opencv基于opencv的canny检测

基于opencv的canny检测

    

#include "cv.h"
#include "highgui.h"

IplImage* doCanny(
    IplImage* in,
    double    lowThresh,
    double    highThresh,
    double    aperture)
{
    if (in->nChannels != 1)
        return(0); //只能处理灰度图像
    IplImage* out = cvCreateImage(
        cvGetSize( in ),
        in->depth, //8位   
        1);//建一个8位灰度图像
    cvCanny( in, out, lowThresh, highThresh, aperture );//函数的第二及第三个参数为两个阈值。
 //小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割
    return( out );
};

int main( int argc, char** argv )
{
  IplImage* img_rgb = cvLoadImage( "D:\\vs2008\\project\\canny检测\\lena.jpg" );
  IplImage* img_gry = cvCreateImage( cvSize( img_rgb->width,img_rgb->height ), img_rgb->depth, 1);
  cvCvtColor(img_rgb, img_gry ,CV_BGR2GRAY);//RGB转化为灰度图像
  cvNamedWindow("RGB图像", CV_WINDOW_AUTOSIZE );
  cvNamedWindow("Gray图像", CV_WINDOW_AUTOSIZE );
  cvNamedWindow("Canny检测图像", CV_WINDOW_AUTOSIZE );
  cvShowImage("Gray图像", img_gry );
  cvShowImage("RGB图像", img_rgb );
  IplImage* img_cny = doCanny( img_gry, 10, 100, 3 );//设置第一阈值和第二阈值,以及soble算子参数
  cvShowImage("Canny检测图像", img_cny );
  cvWaitKey(0);
  cvReleaseImage( &img_rgb);
  cvReleaseImage( &img_gry);
  cvReleaseImage( &img_cny);
  cvDestroyWindow("RGB图像");
  cvDestroyWindow("Gray图像");
  cvDestroyWindow("Canny检测图像");
}
原图

opencv基于opencv的canny检测_第1张图片

灰度图

opencv基于opencv的canny检测_第2张图片

canny边缘检测

opencv基于opencv的canny检测_第3张图片

你可能感兴趣的:(opencv学习)