반응형
4분할로 웹캠 또는 동영상을 보여주는 OpenCV C++ 예제 코드입니다.
2021. 12. 4 - 최초작성
초기화면 또는 0을 누른 경우에는 4개의 영상을 4분할로 보여주며 1 ~ 4 사이 숫자 누르면 영상 1개씩 전체화면으로 보여줍니다.
테스트에 사용한 영상을 캡처한 결과입니다. 요청 있을시 이미지를 삭제하도록 하겠습니다.
전체 소스 코드입니다.
#include "opencv2/opencv.hpp"
#include "iostream"
using namespace std;
using namespace cv;
int main()
{
VideoCapture camera1("1.mp4");
if (!camera1.isOpened())
{
cout << "ERROR: Could not open camera1" << endl;
exit(1);
}
VideoCapture camera2("2.mp4");
if (!camera2.isOpened())
{
cout << "ERROR: Could not open camera2" << endl;
exit(1);
}
VideoCapture camera3("3.mp4");
if (!camera3.isOpened())
{
cout << "ERROR: Could not open camera3" << endl;
exit(1);
}
VideoCapture camera4("4.mp4");
if (!camera4.isOpened())
{
cout << "ERROR: Could not open camera4" << endl;
exit(1);
}
int mode = 0;
while(1)
{
Mat frame1, frame2, frame3, frame4;
camera1 >> frame1;
if (frame1.empty()) {
cout << "ERROR! blank frame1 grabbed\n";
break;
}
camera2 >> frame2;
if (frame2.empty()) {
cout << "ERROR! blank frame2 grabbed\n";
break;
}
camera3 >> frame3;
if (frame3.empty()) {
cout << "ERROR! blank frame3 grabbed\n";
break;
}
camera4 >> frame4;
if (frame4.empty()) {
cout << "ERROR! blank frame4 grabbed\n";
break;
}
switch(mode)
{
case 1:
putText( frame1, "Camera 1", Point(20, 70), FONT_HERSHEY_TRIPLEX, 2, Scalar(0, 255, 0) );
imshow("Webcam", frame1);
break;
case 2:
putText( frame2, "Camera 2", Point(20, 70), FONT_HERSHEY_TRIPLEX, 2, Scalar(0, 255, 0) );
imshow("Webcam", frame2);
break;
case 3:
putText( frame3, "Camera 3", Point(20, 70), FONT_HERSHEY_TRIPLEX, 2, Scalar(0, 255, 0) );
imshow("Webcam", frame3);
break;
case 4:
putText( frame4, "Camera 4", Point(20, 70), FONT_HERSHEY_TRIPLEX, 2, Scalar(0, 255, 0) );
imshow("Webcam", frame4);
break;
default:
Mat imgh1;
Mat imgh2;
Mat img_result;
hconcat(frame1, frame2, imgh1);
hconcat(frame3, frame4, imgh2);
vconcat(imgh1, imgh2, img_result);
putText( img_result, "ALL", Point(20, 70), FONT_HERSHEY_TRIPLEX, 2, Scalar(0, 255, 0) );
imshow("Webcam", img_result);
break;
}
int key = waitKey(1);
if ( key - '0' >= 0 && key - '0' < 5 )
mode = key - '0';
if (key == 27)
break;
}
return 0;
}
반응형