[공부]opencv 템플릿매칭(template) (3)
사진으로 템플릿 매칭을 해봤으니 이제 실시간으로 해봐야겠죠
비디오에서 해보는 겁니다. 비디오는 녹화된 영상이나 카메라로 찍고 있어도 됩니다.
이 전에 했던 소스코드를 그대로 사용하다 보니 약간의 에러가 많았는데요
첫번째에러가 COLOR_GRAY2BGR이 였습니다.
이전 코드에선 위의 메소드를 사용했는데 이렇게 비디오로 할 때는 반대로 해주셔야 합니다. COLOR_BGR2GRAY로 해주시면 됩니다.
비디오에서 해보는 겁니다. 비디오는 녹화된 영상이나 카메라로 찍고 있어도 됩니다.
이 전에 했던 소스코드를 그대로 사용하다 보니 약간의 에러가 많았는데요
첫번째에러가 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(255, 0, 0), 2);
imshow("ds", dst);
imshow("frame", frame);
if (waitKey(delay) == 27) break;
}
return 0;
}
| cs |
댓글
댓글 쓰기