반응형

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



반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


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

+ Recent posts