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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenCV

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

C++

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

Q&A

解決済

1回答

2080閲覧

指定領域のマッチング

yamata

総合スコア36

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenCV

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

C++

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

0グッド

0クリップ

投稿2016/10/21 05:21

編集2016/10/21 05:43

先日も、質問したのですが、解決しなかったため、再度質問します。

cvRectangleで囲った領域にのみ、テンプレートマッチングを行う方法を考えています。

画像の様に、1枚の画像の中に2箇所赤枠を囲み、
左の赤枠にはテンプレート1を、右の赤枠にはテンプレート2をそれぞれマッチングさせる方法を探しています。

現在のプログラムを以下に示します。
・赤枠で囲った領域と、ROIの範囲を同じにしたい(右の赤枠が一致しない)
・できたら、もう少し簡潔にしたい

以上、よろしくお願いします。

使用環境は、Windouws7、vc++2010Express、opencv2.4.9です。

イメージ説明

int main(int argc, char *argv[]) { IplImage * img = NULL; IplImage * copy_img1 = NULL; IplImage * copy_img2; //--------原画像を読み込む--------- img=cvLoadImage("ペンギン.jpg",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); //カラー読み込み copy_img1=cvCloneImage(img); copy_img2=cvCloneImage(img); cvRectangle(img,cvPoint(0,0),cvPoint(200,480),CV_RGB(255,0,0),3); cvRectangle(img,cvPoint(600,0),cvPoint(200,300),CV_RGB(255,0,0),3); //cvSetImageROI(img,cvRect(0,0,img->width/2,img->height/2)); CvRect rect1; rect1.x = cvRound(0); rect1.y = cvRound(0); rect1.width = cvRound(200); rect1.height = cvRound(480); cvSetImageROI(copy_img1,rect1); CvRect rect2; rect2.x = cvRound(600); rect2.y = cvRound(0); rect2.width = cvRound(200); rect2.height = cvRound(300); cvSetImageROI(copy_img2,rect2); //テンプレート画像表示 cvNamedWindow("img_window",CV_WINDOW_AUTOSIZE); cvShowImage("img_window",img); //テンプレート画像表示 cvNamedWindow("copy_img1_window",CV_WINDOW_AUTOSIZE); cvShowImage("copy_img1_window",copy_img1); //テンプレート画像表示 cvNamedWindow("copy_img2_window",CV_WINDOW_AUTOSIZE); cvShowImage("copy_img2_window",copy_img2); cvWaitKey(0); }

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

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

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

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

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

episteme

2016/10/21 05:27

- どうなることを期待して/このコードで/こうしたら/こんな結果になった くらいのことは書かないと相手してもらえんのちゃいます?
yamata

2016/10/21 05:38

修正しました。よろしくお願いします。
yamata

2016/10/21 05:43

古いプログラムをはってしまいました。修正したので、お願いします。
episteme

2016/10/21 05:44

で、なにが/どう うまいこといかんのですか?
yamata

2016/10/21 05:49

・の部分にも書いたのですが、右の赤枠と、右のROIの部分が一致しないのを解決したいです。
episteme

2016/10/21 05:55

(600,0)から幅200/高300の領域が表示されないんですか? 実際にはどうなるんですか?
yamata

2016/10/21 05:59

実際には、さらに右の関係ない領域が表示されます。
episteme

2016/10/21 06:09

...わからんなー、(600,0)が始点なら左枠の右端にくっつくはずがないのでは?
yamata

2016/10/21 06:14

そちらもおかしいと考えています。ROIの切り抜きは正しくて、cvrectangleが正しくないということになるのでしょうか?
yamata

2016/10/21 06:14

ROIの切抜きだと、左枠に重なることはありません。
episteme

2016/10/21 06:16

始点(200,0)のマチガイじゃなくて?
yamata

2016/10/21 06:21

間違いではないです。
episteme

2016/10/21 06:23

確認ですが、その赤枠は"現コードを実行したときに得られる画像の位置"ですか? それとも期待する位置ですか?
yamata

2016/10/21 06:29

上の画像は、実行した時の画像になります。
guest

回答1

0

ベストアンサー

cvRectangle(img,cvPoint(600,0),cvPoint(200,300),CV_RGB(255,0,0),3);

これは 右上(600,0) と 左下(200,300) で定まる長方形ですよね。

一方

rect2.x = cvRound(600); rect2.y = cvRound(0); rect2.width = cvRound(200); rect2.height = cvRound(300);

これは 左上(600,0) 幅200/高300 ですよね?

両者が同じわけがないですよね?

投稿2016/10/21 06:42

編集2016/10/21 06:44
episteme

総合スコア16614

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

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

yamata

2016/10/21 06:45

ありがとうございます。 cvRectangleも左上を先に決めていると思っていました。
episteme

2016/10/21 06:51

そうじゃないよ。長方形の対角にある2頂点を指定するんよ。 ...ってマニュアルに書いてあったんだけど、ちゃんと読んだ?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問