Posted on 2017/01/15, 1:41 PM By admin22
画像探索をOpenCVを使ってやってみました。
参考: http://opencv.jp/sample/matching.html
ソースはほとんどそのままですが、部分的な修正だったり自分の環境での動作確認は結構大切なので、実際に動かしてみました。
環境: Ubuntu 16.04
コンパイル
cc -o tmatch tmatch.c -lopencv_core -lopencv_highgui -lopencv_imgproc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#include <opencv/cv.h> #include <opencv/highgui.h> #include <stdio.h> int main (int argc, char **argv) { double min_val, max_val; CvPoint min_loc, max_loc; CvSize dst_size; IplImage *src_img, *tmp_img, *dst_img; if (argc != 3 || (src_img = cvLoadImage (argv[1], CV_LOAD_IMAGE_COLOR)) == 0 || (tmp_img = cvLoadImage (argv[2], CV_LOAD_IMAGE_COLOR)) == 0){ puts("error"); return -1; } dst_size = cvSize (src_img->width - tmp_img->width + 1, src_img->height - tmp_img->height + 1); dst_img = cvCreateImage (dst_size, IPL_DEPTH_32F, 1); cvMatchTemplate (src_img, tmp_img, dst_img, CV_TM_CCOEFF_NORMED); cvMinMaxLoc (dst_img, &min_val, &max_val, &min_loc, &max_loc, NULL); cvRectangle (src_img, max_loc, cvPoint (max_loc.x + tmp_img->width, max_loc.y + tmp_img->height), CV_RGB (255, 0, 0), 2, 8, 0); cvNamedWindow ("Image", 1); cvShowImage ("Image", src_img); cvWaitKey (0); cvDestroyWindow ("Image"); cvReleaseImage (&src_img); cvReleaseImage (&tmp_img); cvReleaseImage (&dst_img); return 0; } |
テスト画像は、下記で使ったLEDの写真です。
http://bitlife.me/em/2017/01/09/bit-counter-arduino/
次に、マッチした部分の周辺を削除したものです。
近い部分を選択してくれました。(これを確認してみたかった)
なかなか面白いですね。
Categories: 未分類 タグ: OpenCV