OpenCV 예제 - 웹캠 영상에 실시간 ROI 하기( Select ROI on Real Time webcam video)OpenCV/OpenCV 강좌2019. 7. 1. 20:54
Table of Contents
반응형
웹캠 영상에 실시간으로 ROI 하는 예제입니다.
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
bool mouse_is_pressing = false;
int start_x, start_y, end_x, end_y;
int step = 0;
Mat img_color;
void swap(int* v1, int* v2) {
int temp = *v1;
*v1 = *v2;
*v2 = temp;
}
void mouse_callback(int event, int x, int y, int flags, void* userdata)
{
Mat img_result = img_color.clone();
if (event == EVENT_LBUTTONDOWN) {
step = 1;
mouse_is_pressing = true;
start_x = x;
start_y = y;
}
else if (event == EVENT_MOUSEMOVE) {
if (mouse_is_pressing) {
end_x = x;
end_y = y;
step = 2;
}
}
else if (event == EVENT_LBUTTONUP) {
mouse_is_pressing = false;
end_x = x;
end_y = y;
step = 3;
}
}
int main()
{
//비디오 캡쳐 초기화
VideoCapture cap(0);
if (!cap.isOpened()) {
cerr << "에러 - 카메라를 열 수 없습니다.\n";
return -1;
}
namedWindow("Color", 1);
setMouseCallback("Color", mouse_callback);
while (1)
{
cap.read(img_color);
if (img_color.empty()) {
cerr << "빈 영상이 캡쳐되었습니다.\n";
break;
}
switch (step)
{
case 1:
circle(img_color, Point(start_x, start_y), 10, Scalar(0, 255, 0), -1);
break;
case 2:
rectangle(img_color, Point(start_x, start_y), Point(end_x, end_y), Scalar(0, 255, 0), 3);
break;
case 3:
if (start_x > end_x) {
swap(&start_x, &end_x);
swap(&start_y, &end_y);
}
Mat ROI(img_color, Rect(start_x, start_y, end_x - start_x, end_y - start_y));
cvtColor(ROI, ROI, COLOR_BGR2GRAY);
Canny(ROI, ROI, 150, 50);
cvtColor(ROI, ROI, COLOR_GRAY2BGR);
ROI.copyTo(img_color(Rect(start_x, start_y, end_x - start_x, end_y - start_y)));
break;
}
imshow("Color", img_color);
if (waitKey(25) >= 0)
break;
}
destroyAllWindows();
return 0;
}
반응형
'OpenCV > OpenCV 강좌' 카테고리의 다른 글
OpenCV에서 이미지의 픽셀에 접근하는 방법 (29) | 2019.07.18 |
---|---|
OpenCV 강좌 - Meanshift 이론과 C++ 예제(meanshift example code in C++) (24) | 2019.07.04 |
OpenCV 강좌 - Haar Cascades에 대해 알아보자. (4) | 2019.06.28 |
OpenCV를 사용하여 얼굴에 선글라스 씌우기 (49) | 2019.06.09 |
OpenCV SURF로 이미지 매칭 테스트 (84) | 2019.05.11 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
@webnautes :: 멈춤보단 천천히라도
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!