반응형

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;
}

 

반응형

해보고 확인한 것을 문서화하여 기록합니다.


부족함이 있지만 도움이 되었으면 합니다.
잘못된 부분이나 개선점을 알려주시면 감사하겠습니다.



포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
문제가 생기면 포스트와 바뀐 환경이 있나 먼저 확인해보세요.

질문을 남겨주면 가능한 빨리 답변드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">