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

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

ただいまの
回答率

91.35%

  • C++

    2412questions

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

  • OpenCV

    617questions

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

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

解決済

回答 1

投稿 2017/11/28 12:07

  • 評価
  • クリップ 0
  • VIEW 67

hoitya

score 2

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);
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

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

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

投稿 2017/11/28 15:39

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/28 15:46

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

    キャンセル

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

ただいまの回答率

91.35%

関連した質問

  • 解決済

    opencvのcvConvertScaleAbs関数エラーを直したい

    こんにちは。 どうしても解決できず、ずっと悩んでいるのでご助力いただけないかと思い投稿しました。 前提・実現したいこと XcodeでC++、opencvを用いて行列操作を

  • 解決済

    byte配列のcv::Matへの画像変換

    byte配列に格納している画像データをMatに画像配列として保存します。この時、cv::imdecodeを使用しています。その後に画素値の変換をかけてcv::imencodeで再び

  • 解決済

    opencvでの画像の読み込み

    opencvで画像の読み込みを行い、テンプレートマッチングを行いたいと考えています。 外部のソフト(IC Imaging Contorol)というアルゴ社のカメラソフトを使い

  • 解決済

    opencvの連番読み込み

    今まで、iplimage型でコードを書いていたのですが、 多くの人の指摘があり、mat型に変更したいと考えています。 そこで、画像の連番読み込み、保存を行いたいと考えていま

  • 解決済

    テンプレートマッチングでの最大値の座標

    opencvでテンプレートマッチングを行っています。 以下の流れで、マッチング箇所を囲っているのですが、 最大値の座標が分からないため、cvrectangle内の+ temp

  • 受付中

    テンプレートマッチング時のエラーについて教えてくださいm(__)m

    以前質問をし、エラーが解決しましたがうまくテンプレートマッチングが行えません。 デバックでみたところ49行目の"Point matchLoc;"で✖がついてしまいます・・・ 原

  • 解決済

    OpenCvSharp3で重心を求めたいです

    以下のように、ラベリングを実行するプログラムはできたのですが、ここから重心の座標や面積を求めるプログラムを作成したいです。どなたか、教えていただけますか? 最終的な目標としては

  • 解決済

    ファイル名に変数を用いて繰り返し読み込み処理を行いたい

    現在画像編集のプログラムopnCVとC++を用いた上で作成している初歩的段階です。 複数枚の画像に対してimreaの処理をかけた上で繰り返し画像の読み込み画像番号順に(1から並んで

同じタグがついた質問を見る

  • C++

    2412questions

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

  • OpenCV

    617questions

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