앞서 간단한 영상을 저장해보았다.

     

    그러므로 이제는 그 영상을 출력하려고 한다. 

     

    --- 목차 ----------

    1. 라즈베리파이 4/400 OpenCV 4.6.0 설치 : https://makeutil.tistory.com/207

    2. 이미지 파일 출력 (png, jpg, bmp) : https://makeutil.tistory.com/212

    3. 웹카메라를 이용한 영상 출력 : https://makeutil.tistory.com/220 

    4. 웹카메라를 이용한 영상 저장 : https://makeutil.tistory.com/221 

    [현재 글] 웹카메라로 저장한 미디어파일(.mp4) 출력 

    --------------------

     

     

    1.  준비하기

      웹카메라를 이용하기 때문에 앞서 "3. 웹카메라를 이용한 영상출력"의 준비 사항을 확인하도록 한다. 현재 본문에서는 간단하게 설명하도록 하겠다. 

      1) 라즈베리파이에 웹 카메라 연결

      2) 카메라가 정상적으로 연결 되어있는지 확인

     

    2. 미디어 출력  소스

      아래는 영상 녹화를 위한 소스이다. 기존 영상 출력에서 영상을 저장하기 위한 객체 선언 후 영상을 가지고 있는 객체(Mat)을 넘겨주는 것 이외에 큰 차이가 없다는 것을 확인할 수 있다. 

     

    #include <iostream>
    #include <opencv2/opencv.hpp>

    int main(int argc, char** argv) 
    {
        if(argc!=2)
        {
            std:cerr << "Illegal Option..." << std::endl;
            return -1;
        }

        // aaaa
        std::string videoPath = argv[1];

        // aaaaa
        cv::VideoCapture cap(videoPath);
        if (!cap.isOpened()) {
            std::cerr << "Media File Open Error!" << std::endl;
            return -1;
        }

        cv::Mat frame;

        // 비디오 재생 루프
        while (true) 
        {
            // 비디오에서 프레임 읽기
            cap >> frame;

            // 비디오의 끝에 도달하면 루프 종료
            if (frame.empty()) {
                break;
            }

            // 프레임 표시
            cv::imshow("Media Player", frame);

            // 'q' 키를 누르면 비디오 재생 종료
            if (cv::waitKey(1) == 'q') 
    {
        std::cout << "Exit Program." << std::endl;
                break;
            }
        }

        // 리소스 정리
        cap.release();
        cv::destroyAllWindows();

        return 0;
    }

     

    3. 실행결과

      실행 결과를 확인해 보도록 하자. 

    3.1. 미디어파일 준비

      이전 포스트인 "4. 웹카메라를 이용한 영상 저장"에서 저장한 동영상파일을 재생 해보도록 하자. 먼저, 현재 샘플 코드가 있는 곳으로 이전에 저장된 동영상 파일을 가져와서, 소유권을 확인하고 변경해주자.

     

      필자는 샘플을 만들때 각각 디렉터리를 만들었다. 이전 포스트의 샘플은 현재 디렉터리의 상위 디렉터리에 media_record라는 디렉터리에 있으므로, 아래와 같이 상대경로를 이용해서 파일을 현재 디렉터리로 복사하였다. 그리고 파일 내용을 확인해보니 소유권이 저러하다. 물론, pi 사용자이니까 그냥 읽어도 상관없겠지만, 나중에 다른 사용자 계정으로 접속했을 때도 사용할 수 있도록 소유권을 755로 변경해 주었다.

     

    3.2. 컴파일

      다음과 같이 입력하여 컴파일 하도록 하자. 

    $ g++ -o media_play media_play.cpp $(pkg-config opencv4 --libs --cflags)

     

    3.3. 실행 결과 

      이번 샘플에서는 어규먼트(argv)를 사용하여 재생할 파일 명을 입력하도록 하였다. 물론, 파일명이나 이런 부분에 상세 처리는 또 코드가 추가될 수도 있겠지만 간단하게 실행파일(argv[0]) 재생할 파일명(argv[1])이 모두 입력된 경우(argc==2)에만 오류 없이 동작하게 된다.

     

     

    mp4 영상이 재생되는 화면이다.

     

      물론, 독자들이 앞으로 다양한 영상을 처리하기 위해서는 여러가지를 더 해야 할 것들이 많다. 이런 부분들은 별도의 게시물들을 그 때마다 추가해놓도록 하겠다. 그럼 독자들은 적당이 응용하여 사용하면 된다. 이후 크기를 바꾸고 영상을 추가적으로 처리하는등 자주 사용하는 예제들을 다루게 될 것이다. 물론, OpenCV의 전체 내용을 다룰 생각은 없고 기본적인 투토리얼을 통해서 독자 여러분들이 검색 뿐만 아니라 Chat-GPT등을 통해서 코드를 작성하고 이해하는데 도움이 될 정도의 수준일 것이다. 

     

      어쨋든, 조금의 도움이라도 되길 바라면서... 

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