Visual Studio 2013 Express Visual C++( アンマネージドコード ) OpenCV 3.1 |
■278.OpenCV Canny アルゴリズムで輪郭抽出 | Prev Top Next | |
|
有名らしい Canny アルゴリズムを使用して輪郭抽出を行います。 cv::Canny() の引数の threshold1 と threshold2 を調整することでエッジと判断される領域が決まりますが、この辺は試行錯誤が必要なようです。
#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