旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

【OpenCV】 画像のコーナーを検出する

OpenCVの復習が必要になったのでメモしておきます。

// グレースケールで画像を読み込む
UMat source;
imread("lenna.jpg", CV_LOAD_IMAGE_GRAYSCALE).copyTo(source);
if (source.empty())
{
    throw runtime_error("Failed to open image");
}

// 画像のコーナーを検出する
int maxCorners = 30; // 検出するコーナーの最大数
double qualityLevel = 0.01; // コーナーの最低品質
double minDistance = 20.0; // 出力されるコーナー間の最小ユークリッド距離
vector<Point2f> corners;
goodFeaturesToTrack(source, corners, maxCorners, qualityLevel, minDistance);

// 検出したコーナーを書き込む
UMat destination = source.clone();
int radius = 8;
Scalar color = Scalar(255, 255, 0);
int thickness = 2;
for (int i = 0; i < corners.size(); ++i)
{
    circle(destination, corners[i], radius, color, thickness);
}

imshow("source", source);
imshow("destination", destination);

f:id:ni4muraano:20170115145041j:plain f:id:ni4muraano:20170117104535j:plain

さらに進化した画像処理ライブラリの定番 OpenCV 3基本プログラミング

さらに進化した画像処理ライブラリの定番 OpenCV 3基本プログラミング