场景

    鉴于仅仅使用二值化函数对图像进行处理,无法对车辆和道路进行完全的轮廓分割,因此通过Candy算子在阀值在19的情况下,一定程度上,对车辆的轮廓进行了分割,达到了不错的效果


代码

//图像的Canny边缘检测

//By MoreWindows (http://blog.csdn.net/MoreWindows)

#include <opencv2/opencv.hpp>

using namespace std;

IplImage *g_pSrcImage, *g_pCannyImg;

const char *pstrWindowsCannyTitle = "边缘检测图(http://blog.csdn.net/MoreWindows)";

//cvCreateTrackbar的回调函数

void on_trackbar(int threshold)

{

  //canny边缘检测

  cvCanny(g_pSrcImage, g_pCannyImg, threshold, threshold * 3, 3);

  cvShowImage(pstrWindowsCannyTitle, g_pCannyImg);

}

int main()

{

  const char *pstrImageName = "001.jpg";

  const char *pstrWindow***cTitle = "原图(http://blog.csdn.net/MoreWindows)";

  const char *pstrWindowsToolBar = "Threshold";


  //从文件中载入图像的灰度图CV_LOAD_IMAGE_GRAYSCALE - 灰度图

  g_pSrcImage = cvLoadImage("D:/20170601092226.png", CV_LOAD_IMAGE_GRAYSCALE);

  g_pCannyImg = cvCreateImage(cvGetSize(g_pSrcImage), IPL_DEPTH_8U, 1);


  //创建窗口

  cvNamedWindow(pstrWindow***cTitle, CV_WINDOW_AUTOSIZE);

  cvNamedWindow(pstrWindowsCannyTitle, CV_WINDOW_AUTOSIZE);


  //创建滑动条

  int nThresholdEdge = 1;

  cvCreateTrackbar(pstrWindowsToolBar, pstrWindowsCannyTitle, &nThresholdEdge, 100, on_trackbar);


  //在指定窗口中显示图像

  cvShowImage(pstrWindow***cTitle, g_pSrcImage);

  on_trackbar(1);


  //等待按键事件

  cvWaitKey();


  cvDestroyWindow(pstrWindow***cTitle);

  cvDestroyWindow(pstrWindowsCannyTitle);

  cvReleaseImage(&g_pSrcImage);

  cvReleaseImage(&g_pCannyImg);

  return 0;

}


参考

http://blog.csdn.net/morewindows/article/details/8239625