エッジ検出

OpenCVを用いてエッジ検出を行ってみます。
エッジ検出を行うアルゴリズムは色々ありますが、今回はCannyアルゴリズムを使ってみました。

/* threshold1 と threshold2 のうち小さいほうがエッジ同士を接続するために用いられ,
  大きいほうが強いエッジの初期検出に用いられる.                */
void cvCanny( const CvArr* image, CvArr* edges, double threshold1,
              double threshold2, int aperture_size=3 );
#include <cv.h>
#include <highgui.h>

int
main (int argc, char **argv)
{
  int x, y;
  unsigned char p[3];
  IplImage *img, *img2;

  if (argc != 2 || (img = cvLoadImage (argv[1], CV_LOAD_IMAGE_GRAYSCALE)) == 0){
    return -1;
  }
  img2 = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);

  cvCanny(img,img2,50.0,200.0);

  cvNamedWindow ("Image", CV_WINDOW_AUTOSIZE);
  cvShowImage ("Image", img2);
  cvWaitKey (0);

  cvDestroyWindow ("Image");
  cvSaveImage("edge.jpg",img);
  cvReleaseImage (&img);

  return 0;
}

実行結果

↓エッジ検出