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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

OpenCV

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

C++

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

Q&A

2回答

2541閲覧

opencvでエラー

yamata

総合スコア36

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

OpenCV

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

C++

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

0グッド

0クリップ

投稿2017/01/05 06:59

oepncvで、テンプレートマッチングをしています。

http://www.cellstat.net/rotatematch/

上のサイトを参考にしているのですが、エラーが出てきました。

やりたいことは、引用サイトと同様に、ワークを回転させて何度傾いているか判断したいです。
また、引用サイトと異なり、長い長方形を回転させるのではなく、50*97の長方形を回転させたいと考えています。

エラー内容は、写真の様になっています。
イメージ説明

よろしくお願い致します。

using namespace cv; using namespace std; //RANE_WIDTHは各レーンの幅を表します. #define RANE_WIDTH 50 int main() { Mat tmpl=imread("temp_up.bmp"); Mat screws=imread("result_0381.bmp"); double maxVal=0; //3本のレーンがあるので3回、iでループを回しています. int roi_x=215; //各レーンの位置を決めます. レーンを矩形とした時の左上の点のx座標をここで指定します. //レーンを切り出す処理です. Rectは切り出す位置のx座標、y座標、幅、高さを順に引数に取ります. //screws.rowsと書くことでscrew[Mat型]の高さを取得できます. Rect roi_rect = Rect(roi_x,53,50,97); Mat single_screw(screws.clone(),roi_rect); //実際の切り出し処理の部分 rectangle(screws, roi_rect, Scalar(0,0,255), 1); //レーンの領域に矩形を描画(赤) //これから回転させるので、回転しても、はみ出ないように広いMatの中央に切り出したレーン画像をコピーする. Mat single_screw_large = Mat::zeros(screws.rows, screws.rows, CV_8UC3); //空のMatを用意する. 縦横ともに、レーンの高さと同じ. Rect copy_rect = Rect(215,53,RANE_WIDTH,97); //コピー先のROIの指定 single_screw.copyTo(single_screw_large(copy_rect)); //コピー処理 imshow("single_screw_large", single_screw_large); //切り出した回転前のレーンを表示 //1度ずつ回転させるときに、どの角度で最もマッチしたかを保持するための変数 int max_angle=-1; double maxVal_global=-1; //テンプレートマッチング for(int angle=-180;angle<180;angle+=1) { Mat rot_single_screw; float scale = 1.0; // 中心:画像中心 cv::Point2f center(single_screw_large.cols*0.5, single_screw_large.rows*0.5); // 2次元の回転行列を計算 const cv::Mat affine_matrix = cv::getRotationMatrix2D( center, angle, scale ); warpAffine(single_screw_large, rot_single_screw, affine_matrix, single_screw_large.size()); Mat result_img; matchTemplate(rot_single_screw,tmpl,result_img, CV_TM_CCOEFF_NORMED); Point max_pt; minMaxLoc(result_img, NULL, &maxVal, NULL, &max_pt); //マッチした場所に矩形を描画 Rect roi_rect2(0, 0, tmpl.cols, tmpl.rows); roi_rect2.x = max_pt.x; roi_rect2.y = max_pt.y; rectangle(rot_single_screw, roi_rect2, Scalar(0,0,255*maxVal), 1); imshow("rot_single_screw", rot_single_screw); imshow("result_img", result_img); if(maxVal>maxVal_global) { maxVal_global=maxVal; max_angle=angle; } waitKey(1); } printf("角度=%lf\n",maxVal); return 0; }

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

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

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

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

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

guest

回答2

0

ROIがMatをはみ出してるようです。
参考にしたサイトとは画像のサイズが違うと思われますので実際に値を入れている部分を書き換える必要が有ります。
どのような画像サイズかわからないのでなんとも言えませんが

#define RANE_WIDTH 50 Rect copy_rect = Rect(215,53,RANE_WIDTH,97);

これあたりが原因かと

投稿2017/01/05 22:01

iwanote

総合スコア295

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

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

yamata

2017/01/06 03:28

画像サイズが720*480になっていて、 その画像の(215,53)の位置に50*97の四角形を回転させたいと思います。 Rect copy_rect = Rect(215,53,RANE_WIDTH,97); 上の値は、画像サイズにする必要があるのでしょうか?
guest

0

エラー内容はAssertエラーでmatrix.cppの323行目で条件に合致しないので実行時エラーになったという内容ですね。
matrix.cppの323行目にブレークポイントをつけてデバッグすれば、どの条件でエラーになったかわかるはずです。
また、どこから呼び出されたかもわかるはずなのでそうやって調べていけばわかるかと。
(私自身はopenCVはやってないので、matrix.cppの323行目がどういう関数なのかわからないのでこれ以上はコメントできません。すいません)

投稿2017/01/05 09:10

PineMatsu

総合スコア3579

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

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

yamata

2017/01/05 11:00

ありがとうございます。 今回のプログラムは、323行目まで達していないプログラムになっています。
PineMatsu

2017/01/06 08:05

ん?自分が作ったソースコードではなくてopenCVのコアのソースであるmatrix.cppの323行目です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問