teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

R6010の解決方法を知りたいです

2016/06/24 03:04

投稿

yamata
yamata

スコア36

title CHANGED
File without changes
body CHANGED
@@ -183,7 +183,7 @@
183
183
  すると、R6010、Array Should be CvMat or IplImage
184
184
  という警告がでました。
185
185
  どの部分で重複しているのかわかりません。
186
- 教えていただけたらと思います。
186
+ R6010の解決方法を教えていただけたらと思います。
187
187
 
188
188
  よろしくお願いします。
189
189
 

2

改良版を追加しました!

2016/06/24 03:03

投稿

yamata
yamata

スコア36

title CHANGED
File without changes
body CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  解決したいことは、
6
6
  ・キーボードを押すと5秒おきに写真を自動で撮影し、自動的にマッチングを行う
7
- ・1つの写真に対して、5枚くらいのテンプレートあてはめてマッチングを行いたい
7
+ ・1つの写真に対して、5枚くらいのテンプレートあてはめてマッチングを行いたい(撮影した写真に5枚のテンプレートをマッチングさせて判断)
8
8
  ・写真を撮ってから、マッチングまでの時間を計測したい→解決しました!
9
9
  の2点があります。
10
10
 
@@ -177,4 +177,139 @@
177
177
  }
178
178
  }
179
179
  コード
180
+ ```
181
+
182
+ また、その改良版を作ってみました。
183
+ すると、R6010、Array Should be CvMat or IplImage
184
+ という警告がでました。
185
+ どの部分で重複しているのかわかりません。
186
+ 教えていただけたらと思います。
187
+
188
+ よろしくお願いします。
189
+
190
+ ```int main( int argc , char** argv)
191
+ {
192
+ int key;//キー入力用の変数
193
+ CvCapture *capture;//カメラキャプチャ用の構造体
194
+ IplImage *frameImage;//キャプチャ画像用IplImage
195
+ char windowNameCapture[] = "Capture";//キャプチャした画像を表示するウィンドウの名前
196
+
197
+ IplImage * temp = NULL;
198
+ IplImage * dst = NULL;
199
+ IplImage * img = NULL;
200
+ IplImage * grey = NULL;
201
+
202
+
203
+ double max_inter1inkage=0;
204
+ double min_inter1inkage=0;
205
+
206
+ CvPoint max_point;
207
+ CvPoint min_point;
208
+ CvPoint corner_point;
209
+
210
+ int counter = 0;
211
+ char str[32];
212
+
213
+
214
+ //カメラを初期化する
215
+ if ( ( capture = cvCreateCameraCapture( -1 ) ) == NULL )
216
+ {
217
+ //カメラが見つからなかった場合
218
+ printf( "カメラが見つかりません\n" );
219
+ return -1;
220
+ }
221
+
222
+
223
+ //Windowの生成
224
+ cvNamedWindow("Show", CV_WINDOW_AUTOSIZE);
225
+
226
+ //カメラ・デバイスから画像を取得
227
+ //frameImage=cvQueryFrame(capture);
228
+
229
+ //テンプレート・マッチングに用いる相関値データを格納する画像の領域確保
230
+ //グレー・スケール画像用に領域確保
231
+ grey=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
232
+ dst =cvCreateImage(cvSize(img->width-temp->width+1,img->height-temp->height+1),IPL_DEPTH_32F,1);
233
+
234
+ //メインループ
235
+ while ( 1 )
236
+ {
237
+ //カメラからの入力画像1フレームをframeImageに格納する
238
+ frameImage = cvQueryFrame( capture );
239
+
240
+ //画像を表示する
241
+ cvShowImage( windowNameCapture, frameImage );
242
+
243
+ //'q'キーが入力されたらループを抜ける
244
+ key = cvWaitKey( 1 );
245
+
246
+ if ( key == 'q' )
247
+ {
248
+ break;
249
+ }
250
+ else if( key == 'c')
251
+ {
252
+ int64 start = cv::getTickCount();//所要時間計測
253
+
254
+ sprintf_s(str, "sign.bmp", counter++);
255
+ cvSaveImage(str, frameImage );
256
+
257
+
258
+ //--------原画像を読み込む---------
259
+ img=cvLoadImage("sign.png",0);
260
+ //namedWindow("原画像");
261
+ //imshow("原画像", src_image);
262
+
263
+ //---------テンプレート画像を読み込む-------
264
+ temp=cvLoadImage("temp.png",0);
265
+ //temp=cvLoadImage("temp2.png",0);
266
+ //temp=cvLoadImage("temp3.png",0);
267
+ //temp=cvLoadImage("temp7.png",0);
268
+ //temp=cvLoadImage("temp8.png",0);
269
+
270
+ //グレー・スケールに変換して格納
271
+ cvCvtColor(img,grey,CV_BGR2GRAY);
272
+
273
+ //-------テンプレートマッチングを取る-----
274
+ grey=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
275
+ dst =cvCreateImage(cvSize(img->width-temp->width+1,img->height-temp->height+1),IPL_DEPTH_32F,1);
276
+ cvMatchTemplate(img,temp,dst,CV_TM_CCOEFF_NORMED);
277
+
278
+ //-----------マッチング点を求める---------
279
+ cvMinMaxLoc(dst,&min_inter1inkage,&max_inter1inkage,
280
+ &min_point,&max_point,NULL);
281
+
282
+ //------マッチングを表示する-----
283
+ //相関値0.75以下ならばLostを表示して次に行く
284
+
285
+ if(max_inter1inkage>0.75)
286
+ {
287
+ //座標を見やすく代入(直接代入でもよい)
288
+ corner_point=cvPoint(max_point.x+temp->width,
289
+ max_point.y+temp->height);
290
+
291
+ //マッチング箇所を四角で描画
292
+ cvRectangle(img,max_point,corner_point,CV_RGB(255,0,0),2);
293
+ printf("Detection\n");
294
+ }
295
+
296
+ else
297
+ {
298
+ printf("Lost\n");
299
+ }
300
+
301
+ int64 end = cv::getTickCount();
302
+ double elapsedMsec = ( end - start )*1000/cv::getTickFrequency();
303
+
304
+ std::cout << elapsedMsec <<"ms" <<std::endl;
305
+ }
306
+ }
307
+
308
+ //メモリ開放
309
+ cvReleaseCapture(&capture);
310
+ cvDestroyWindow("windowNameCapture");
311
+ return 0;
312
+
313
+ }
314
+ コード
180
315
  ```

1

所要時間は解決しました!

2016/06/23 06:33

投稿

yamata
yamata

スコア36

title CHANGED
@@ -1,1 +1,1 @@
1
- opencvを利用したテンプレートマッチング
1
+ opencvを利用した複数枚のテンプレートマッチング
body CHANGED
@@ -5,8 +5,8 @@
5
5
  解決したいことは、
6
6
  ・キーボードを押すと5秒おきに写真を自動で撮影し、自動的にマッチングを行う
7
7
  ・1つの写真に対して、5枚くらいのテンプレートあてはめてマッチングを行いたい
8
- ・写真を撮ってから、マッチングまでの時間を計測したい
8
+ ・写真を撮ってから、マッチングまでの時間を計測したい→解決しました!
9
- 3点があります。
9
+ 2点があります。
10
10
 
11
11
  初心者な為、教えていただけたらと思います。
12
12