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

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

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

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

C++

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

Q&A

解決済

1回答

636閲覧

OpenCVで2点のピクセル座標の差を求めるプログラムが分かりません。

hoitya

総合スコア14

OpenCV

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

C++

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

0グッド

0クリップ

投稿2017/11/28 03:07

OpenCVのテンプレートマッチングで2点ABのピクセル座標(x、y)のそれぞれの値の差を求めるコードを書いています。
2点の座標をテキストに表示するところまではできたのですが、
B-Aの座標が(0,0)と表示されてしまいます。
個人的にmax_pt.xやmax_pt.yが変数だと思い、xaやyaに代入しているのですがそれがされていないまま表示されているのだと思います。
プログラミングは初心者なので基本的な部分が間違っていたらすいません。
ご教授頂けたら嬉しいです。よろしくお願いします。

  int xa = 0; int ya = 0; int xb = 0; int yb = 0; int ba_x = xb - xa; int ba_y = yb - ya; for (int j = 0; j<2; j++) { cv::Mat &tmp_img = tmp_imgs[j]; cv::Mat result_img; // 50 個検出する for (int i = 0; i<50; i++) { // テンプレートマッチング // cv::matchTemplate(search_img, tmp_img, result_img, CV_TM_SQDIFF_NORMED); cv::matchTemplate(search_img, tmp_img, result_img, CV_TM_CCOEFF_NORMED); // 最大のスコアの場所を探す cv::Rect roi_rect(0, 0, tmp_img.cols, tmp_img.rows); cv::Point max_pt; double maxVal; cv::minMaxLoc(result_img, NULL, &maxVal, NULL, &max_pt); // 一定スコア以下の場合は処理終了 if (maxVal < 0.58) break; roi_rect.x = max_pt.x; roi_rect.y = max_pt.y; if (j == 0) { std::cout << "A" << std::endl; writing_file << "A " << "(" << max_pt.x << ", " << max_pt.y << ")\n"; xa = max_pt.x; ya = max_pt.y; } else if (j == 1) { std::cout << "B" << std::endl; writing_file << "B " << "(" << max_pt.x << ", " << max_pt.y << ")\n"; xb = max_pt.x; yb = max_pt.y; } std::cout << "B-A" << std::endl; writing_file << "B-A " << "(" << ba_x << ", " << ba_y << ")\n"; } printf("%d\n", j); } cv::imshow("search image", search_img0);

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

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

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

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

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

guest

回答1

0

ベストアンサー

ソースコードを読む限り、単純に計算していないだけの気が・・・

writing_file << "B-A " << "(" << ba_x << ", " << ba_y << ")\n";
の処理の前に、
ba_x = xb - xa;
ba_y = yb - ya;
がいると思うのですが、いかがでしょう。

投稿2017/11/28 06:39

mirarudo

総合スコア13

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

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

hoitya

2017/11/28 06:46

すいません。ご指摘ありがとうございます。できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問