質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

926閲覧

C++ opencvを用いたテンプレートマッチングのエラーの解決方法を教えていただきたいです

kirakira1212

総合スコア0

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2022/10/20 15:57

前提

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; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2022/10/20 16:46

cv::CV_TM_SQDIFF_NORMED (あてずっぽ)
thkana

2022/10/20 21:49

> ネットで調べてコピペ コピペ元を示してください。 > epistemeさん とすると、そこが解決したあとに imshow("img2", img); なんてのも引っかかるのかしら? こちらはcv::imshow()になっているところもある...
guest

回答1

0

C++

1cv::TM_SQDIFF_NORMED

とすれば通ると思います。
imgproc.hppの中で宣言されてますね。
imgproc.hpp File Reference

投稿2022/10/20 23:50

編集2022/10/21 00:48
ALOHAMS

総合スコア195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2022/10/21 01:18 編集

補足(…になるかどうか) エラーの原因: 定数の定義がOpenCVのバージョンで異なるから. どこかの古いコードをコピペで持ってきたりすればそういうことになる. 対処: (OpenCV2.X から 3.X になったあたりで?)古い定数名の先頭の "CV_" の部分を取っ払った形で cv 名前空間の中に移動されている物が多いので, CV_TM_SQDIFF_NORMED に対しては,まずは cv::TM_SQDIFF_NORMED を探してみると良い. (もちろん,そんな場当たり的?な対処を試すよりも,なにはともあれ自分の使うバージョンのリファレンスで cv::matchTemplate について調べるのが正攻法なのだが)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問