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

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

【OpenCV】 画像から特定パターンを探す

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

// 画像を読み込む
UMat source;
imread("scene.jpg", CV_LOAD_IMAGE_GRAYSCALE).copyTo(source);
if (source.empty())
{
    throw runtime_error("Failed to open image");
}
UMat parts;
imread("parts.jpg", CV_LOAD_IMAGE_GRAYSCALE).copyTo(parts);
if (parts.empty())
{
    throw runtime_error("Failed to open image");
}

// テンプレートマッチングで場所を特定する
UMat result;
matchTemplate(source, parts, result, CV_TM_CCOEFF_NORMED);
double maxValue;
Point point1;
minMaxLoc(result, NULL, &maxValue, NULL, &point1);

// 特定した場所に四角を書き込む
Point point2 = Point(point1.x + parts.cols, point1.y + parts.rows);
UMat destination = source.clone();
Scalar color = Scalar(255, 0, 0);
int thickness = 2;
rectangle(destination, point1, point2, color, thickness);

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

f:id:ni4muraano:20170118183340j:plain:w400 f:id:ni4muraano:20170118183352j:plain:w120 f:id:ni4muraano:20170118183357j:plain:w400

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

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