Visual Studio 2013 Express
 Visual C++( アンマネージドコード )
 OpenCV 3.1

■278.OpenCV Canny アルゴリズムで輪郭抽出 Prev Top Next
関連ページ:

有名らしい Canny アルゴリズムを使用して輪郭抽出を行います。
cv::Canny() の引数の threshold1 と threshold2 を調整することでエッジと判断される領域が決まりますが、この辺は試行錯誤が必要なようです。


---main.cpp---

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>

#pragma comment( lib, "opencv_world300d.lib" )

int main(int argc, const char* argv[])
{
   int hr = -1;

   try
   {
      cv::Mat src, dst;

      // 画像読み込み
      src = cv::imread("D:/TEMP/MaverickProj/Image/OpenCV/40/Texture.png", cv::IMREAD_GRAYSCALE);

      // Cannyアルゴリズム
      cv::Canny(src,
         dst,
         300,  // 勾配がこのパラメータを下回っている場合は非エッジとして判定
         300   // 勾配がこのパラメータを超えている場合はエッジとして判定.両パラメータの間にある場合はエッジに接続されている場合にエッジとして判定.
         );

      cv::namedWindow("src", 1);
      imshow("src", src);

      cv::namedWindow("dst", 1);
      imshow("dst", dst);

      cv::waitKey(0);

      hr = 0;
   }

   catch (cv::Exception ex)
   {
      std::cout << ex.err << std::endl;
   }

   // ウィンドウの破棄
   cv::destroyAllWindows();

   return hr;
}

元画像

輪郭抽出
threshold1 = 300
threshold2 = 300

輪郭抽出
threshold1 = 30
threshold2 = 30

輪郭抽出
threshold1 = 30
threshold2 = 300


Prev Top Next
inserted by FC2 system