[공부]opencv 템플릿매칭(template) (3)

사진으로 템플릿 매칭을 해봤으니 이제 실시간으로 해봐야겠죠
비디오에서 해보는 겁니다. 비디오는 녹화된 영상이나 카메라로 찍고 있어도 됩니다.

이 전에 했던 소스코드를 그대로 사용하다 보니 약간의 에러가 많았는데요

첫번째에러가 COLOR_GRAY2BGR이 였습니다.
이전 코드에선 위의 메소드를 사용했는데 이렇게 비디오로 할 때는 반대로 해주셔야 합니다. COLOR_BGR2GRAY로 해주시면 됩니다.


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
37
38
39
40
41
42
43
44
45
#include "opencv.hpp"
using namespace cv;
using namespace std;
 
int main() {
    VideoCapture capture(0);
    if (!capture.isOpened()) {
        cout << "Can not open capture!!" << endl;
        return 0;
    }
 
    Mat tImg1 = imread("y.jpg", IMREAD_GRAYSCALE);
    Mat sss = imread("1.jpg", IMREAD_GRAYSCALE);
    if (tImg1.empty()) return -1;
 
    double minVal;
    Point minLoc;
    Mat result;
        
    Size size = Size((int)capture.get(CAP_PROP_FRAME_WIDTH), (int)capture.get(CAP_PROP_FRAME_HEIGHT));
    cout << "Size = " << size << endl;
    imshow("frame"NULL);
    waitKey(100);
    int delay = 30;
    int frameNum = -1;
    Mat frame;
    namedWindow("frame", WINDOW_AUTOSIZE);
    
    Mat dst;
 
    
    while (1) {
        capture >> frame;
        if (frame.empty()) break;
        cvtColor(frame, dst, COLOR_BGR2GRAY);
        matchTemplate(dst, tImg1, result, TM_SQDIFF_NORMED);
        minMaxLoc(result, &minVal, NULL&minLoc, NULL);
        rectangle(frame, minLoc,
            Point(minLoc.x + tImg1.cols, minLoc.y + tImg1.rows), Scalar(25500), 2);
        imshow("ds", dst);
        imshow("frame", frame);
        if (waitKey(delay) == 27break;
    }
    return 0;
}
cs

댓글

이 블로그의 인기 게시물

파이썬을 이용한 image to pdf 변환 프로그램

젯슨 나노 - GPIO