前提
c++を使いプログラムを作成しています。
テンプレートマッチングを実装するためにネットで調べてコピペでコードを映したのですが1つエラーが出てしまうので質問しました
発生している問題・エラーメッセージ
「識別子 "CV_TM_SQDIFF_NORMED" が定義されていません」 というエラーが出てしまいます。
どのようにすればエラーは解除することができますか?
該当のソースコード
#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 img, tmp, result; // 画像読み込み img = cv::imread("abca466956b10611e4ed2_t.jeg", cv::IMREAD_COLOR); tmp = cv::imread("6660abca466956bcd7555b10611e4eb2_t.jpeg", cv::IMREAD_COLOR); cv::namedWindow("img", 1); imshow("img", img); // テンプレートと,それに重なった画像領域とを比較 cv::matchTemplate( img, // テンプレートの探索対象となる画像.8ビットまたは32ビットの浮動小数点型. tmp, // 探索されるテンプレート.探索対象となる画像以下のサイズで,同じデータ型でなければならない result, // 比較結果のマップ CV_TM_SQDIFF_NORMED // 比較手法 ); double val; cv::Point pt; // 配列全体あるいは部分配列に対する,大域的最小値 cv::minMaxLoc(result, &val, nullptr, &pt, nullptr); // 結果が小さいほど一致率が高いと判断する if (val < 0.01) { // 矩形を描画 cv::rectangle(img, pt, // 矩形の1つの頂点座標 pt + cv::Point(tmp.cols, tmp.rows), // 矩形の反対側の頂点座標 cv::Scalar(0, 0, 255), // 色 2, // 矩形の枠線の太さ cv::LINE_8 // 枠線の種類 ); } cv::namedWindow("img2", 1); imshow("img2", img); cv::namedWindow("tmp", 1); cv::imshow("tmp", tmp); cv::waitKey(0); hr = 0; } catch (cv::Exception ex) { std::cout << ex.err << std::endl; } // ウィンドウの破棄 cv::destroyAllWindows(); return hr; }