質問編集履歴
3
R6010の解決方法を知りたいです
test
CHANGED
File without changes
|
test
CHANGED
@@ -368,7 +368,7 @@
|
|
368
368
|
|
369
369
|
どの部分で重複しているのかわかりません。
|
370
370
|
|
371
|
-
教えていただけたらと思います。
|
371
|
+
R6010の解決方法を教えていただけたらと思います。
|
372
372
|
|
373
373
|
|
374
374
|
|
2
改良版を追加しました!
test
CHANGED
File without changes
|
test
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
・キーボードを押すと5秒おきに写真を自動で撮影し、自動的にマッチングを行う
|
12
12
|
|
13
|
-
・1つの写真に対して、5枚くらいのテンプレートあてはめてマッチングを行いたい
|
13
|
+
・1つの写真に対して、5枚くらいのテンプレートをあてはめてマッチングを行いたい(撮影した写真に5枚のテンプレートをマッチングさせて判断)
|
14
14
|
|
15
15
|
・写真を撮ってから、マッチングまでの時間を計測したい→解決しました!
|
16
16
|
|
@@ -357,3 +357,273 @@
|
|
357
357
|
コード
|
358
358
|
|
359
359
|
```
|
360
|
+
|
361
|
+
|
362
|
+
|
363
|
+
また、その改良版を作ってみました。
|
364
|
+
|
365
|
+
すると、R6010、Array Should be CvMat or IplImage
|
366
|
+
|
367
|
+
という警告がでました。
|
368
|
+
|
369
|
+
どの部分で重複しているのかわかりません。
|
370
|
+
|
371
|
+
教えていただけたらと思います。
|
372
|
+
|
373
|
+
|
374
|
+
|
375
|
+
よろしくお願いします。
|
376
|
+
|
377
|
+
|
378
|
+
|
379
|
+
```int main( int argc , char** argv)
|
380
|
+
|
381
|
+
{
|
382
|
+
|
383
|
+
int key;//キー入力用の変数
|
384
|
+
|
385
|
+
CvCapture *capture;//カメラキャプチャ用の構造体
|
386
|
+
|
387
|
+
IplImage *frameImage;//キャプチャ画像用IplImage
|
388
|
+
|
389
|
+
char windowNameCapture[] = "Capture";//キャプチャした画像を表示するウィンドウの名前
|
390
|
+
|
391
|
+
|
392
|
+
|
393
|
+
IplImage * temp = NULL;
|
394
|
+
|
395
|
+
IplImage * dst = NULL;
|
396
|
+
|
397
|
+
IplImage * img = NULL;
|
398
|
+
|
399
|
+
IplImage * grey = NULL;
|
400
|
+
|
401
|
+
|
402
|
+
|
403
|
+
|
404
|
+
|
405
|
+
double max_inter1inkage=0;
|
406
|
+
|
407
|
+
double min_inter1inkage=0;
|
408
|
+
|
409
|
+
|
410
|
+
|
411
|
+
CvPoint max_point;
|
412
|
+
|
413
|
+
CvPoint min_point;
|
414
|
+
|
415
|
+
CvPoint corner_point;
|
416
|
+
|
417
|
+
|
418
|
+
|
419
|
+
int counter = 0;
|
420
|
+
|
421
|
+
char str[32];
|
422
|
+
|
423
|
+
|
424
|
+
|
425
|
+
|
426
|
+
|
427
|
+
//カメラを初期化する
|
428
|
+
|
429
|
+
if ( ( capture = cvCreateCameraCapture( -1 ) ) == NULL )
|
430
|
+
|
431
|
+
{
|
432
|
+
|
433
|
+
//カメラが見つからなかった場合
|
434
|
+
|
435
|
+
printf( "カメラが見つかりません\n" );
|
436
|
+
|
437
|
+
return -1;
|
438
|
+
|
439
|
+
}
|
440
|
+
|
441
|
+
|
442
|
+
|
443
|
+
|
444
|
+
|
445
|
+
//Windowの生成
|
446
|
+
|
447
|
+
cvNamedWindow("Show", CV_WINDOW_AUTOSIZE);
|
448
|
+
|
449
|
+
|
450
|
+
|
451
|
+
//カメラ・デバイスから画像を取得
|
452
|
+
|
453
|
+
//frameImage=cvQueryFrame(capture);
|
454
|
+
|
455
|
+
|
456
|
+
|
457
|
+
//テンプレート・マッチングに用いる相関値データを格納する画像の領域確保
|
458
|
+
|
459
|
+
//グレー・スケール画像用に領域確保
|
460
|
+
|
461
|
+
grey=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
|
462
|
+
|
463
|
+
dst =cvCreateImage(cvSize(img->width-temp->width+1,img->height-temp->height+1),IPL_DEPTH_32F,1);
|
464
|
+
|
465
|
+
|
466
|
+
|
467
|
+
//メインループ
|
468
|
+
|
469
|
+
while ( 1 )
|
470
|
+
|
471
|
+
{
|
472
|
+
|
473
|
+
//カメラからの入力画像1フレームをframeImageに格納する
|
474
|
+
|
475
|
+
frameImage = cvQueryFrame( capture );
|
476
|
+
|
477
|
+
|
478
|
+
|
479
|
+
//画像を表示する
|
480
|
+
|
481
|
+
cvShowImage( windowNameCapture, frameImage );
|
482
|
+
|
483
|
+
|
484
|
+
|
485
|
+
//'q'キーが入力されたらループを抜ける
|
486
|
+
|
487
|
+
key = cvWaitKey( 1 );
|
488
|
+
|
489
|
+
|
490
|
+
|
491
|
+
if ( key == 'q' )
|
492
|
+
|
493
|
+
{
|
494
|
+
|
495
|
+
break;
|
496
|
+
|
497
|
+
}
|
498
|
+
|
499
|
+
else if( key == 'c')
|
500
|
+
|
501
|
+
{
|
502
|
+
|
503
|
+
int64 start = cv::getTickCount();//所要時間計測
|
504
|
+
|
505
|
+
|
506
|
+
|
507
|
+
sprintf_s(str, "sign.bmp", counter++);
|
508
|
+
|
509
|
+
cvSaveImage(str, frameImage );
|
510
|
+
|
511
|
+
|
512
|
+
|
513
|
+
|
514
|
+
|
515
|
+
//--------原画像を読み込む---------
|
516
|
+
|
517
|
+
img=cvLoadImage("sign.png",0);
|
518
|
+
|
519
|
+
//namedWindow("原画像");
|
520
|
+
|
521
|
+
//imshow("原画像", src_image);
|
522
|
+
|
523
|
+
|
524
|
+
|
525
|
+
//---------テンプレート画像を読み込む-------
|
526
|
+
|
527
|
+
temp=cvLoadImage("temp.png",0);
|
528
|
+
|
529
|
+
//temp=cvLoadImage("temp2.png",0);
|
530
|
+
|
531
|
+
//temp=cvLoadImage("temp3.png",0);
|
532
|
+
|
533
|
+
//temp=cvLoadImage("temp7.png",0);
|
534
|
+
|
535
|
+
//temp=cvLoadImage("temp8.png",0);
|
536
|
+
|
537
|
+
|
538
|
+
|
539
|
+
//グレー・スケールに変換して格納
|
540
|
+
|
541
|
+
cvCvtColor(img,grey,CV_BGR2GRAY);
|
542
|
+
|
543
|
+
|
544
|
+
|
545
|
+
//-------テンプレートマッチングを取る-----
|
546
|
+
|
547
|
+
grey=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
|
548
|
+
|
549
|
+
dst =cvCreateImage(cvSize(img->width-temp->width+1,img->height-temp->height+1),IPL_DEPTH_32F,1);
|
550
|
+
|
551
|
+
cvMatchTemplate(img,temp,dst,CV_TM_CCOEFF_NORMED);
|
552
|
+
|
553
|
+
|
554
|
+
|
555
|
+
//-----------マッチング点を求める---------
|
556
|
+
|
557
|
+
cvMinMaxLoc(dst,&min_inter1inkage,&max_inter1inkage,
|
558
|
+
|
559
|
+
&min_point,&max_point,NULL);
|
560
|
+
|
561
|
+
|
562
|
+
|
563
|
+
//------マッチングを表示する-----
|
564
|
+
|
565
|
+
//相関値0.75以下ならばLostを表示して次に行く
|
566
|
+
|
567
|
+
|
568
|
+
|
569
|
+
if(max_inter1inkage>0.75)
|
570
|
+
|
571
|
+
{
|
572
|
+
|
573
|
+
//座標を見やすく代入(直接代入でもよい)
|
574
|
+
|
575
|
+
corner_point=cvPoint(max_point.x+temp->width,
|
576
|
+
|
577
|
+
max_point.y+temp->height);
|
578
|
+
|
579
|
+
|
580
|
+
|
581
|
+
//マッチング箇所を四角で描画
|
582
|
+
|
583
|
+
cvRectangle(img,max_point,corner_point,CV_RGB(255,0,0),2);
|
584
|
+
|
585
|
+
printf("Detection\n");
|
586
|
+
|
587
|
+
}
|
588
|
+
|
589
|
+
|
590
|
+
|
591
|
+
else
|
592
|
+
|
593
|
+
{
|
594
|
+
|
595
|
+
printf("Lost\n");
|
596
|
+
|
597
|
+
}
|
598
|
+
|
599
|
+
|
600
|
+
|
601
|
+
int64 end = cv::getTickCount();
|
602
|
+
|
603
|
+
double elapsedMsec = ( end - start )*1000/cv::getTickFrequency();
|
604
|
+
|
605
|
+
|
606
|
+
|
607
|
+
std::cout << elapsedMsec <<"ms" <<std::endl;
|
608
|
+
|
609
|
+
}
|
610
|
+
|
611
|
+
}
|
612
|
+
|
613
|
+
|
614
|
+
|
615
|
+
//メモリ開放
|
616
|
+
|
617
|
+
cvReleaseCapture(&capture);
|
618
|
+
|
619
|
+
cvDestroyWindow("windowNameCapture");
|
620
|
+
|
621
|
+
return 0;
|
622
|
+
|
623
|
+
|
624
|
+
|
625
|
+
}
|
626
|
+
|
627
|
+
コード
|
628
|
+
|
629
|
+
```
|
1
所要時間は解決しました!
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
opencvを利用したテンプレートマッチング
|
1
|
+
opencvを利用した複数枚のテンプレートマッチング
|
test
CHANGED
@@ -12,9 +12,9 @@
|
|
12
12
|
|
13
13
|
・1つの写真に対して、5枚くらいのテンプレートあてはめてマッチングを行いたい
|
14
14
|
|
15
|
-
・写真を撮ってから、マッチングまでの時間を計測したい
|
15
|
+
・写真を撮ってから、マッチングまでの時間を計測したい→解決しました!
|
16
|
-
|
16
|
+
|
17
|
-
の
|
17
|
+
の2点があります。
|
18
18
|
|
19
19
|
|
20
20
|
|