오류내용

VideoCapture를 이용해서 동영상을 실행하고 싶다. 그런데 isOpened()단계에서 동영상이 열리지 않는다고 오류를 출력한다. 그런데 웹캠은 또 잘 된다.

 

VideoCapture cap("001.avi");
if(!cap.isOpened())
{
    cout << "Error!" << endl; // 현재 라인에서 오류 출력
}
else{
    Mat frame;
    while(char(waitKey(1)) != 'q' && cap.isOpened())
    {
        cap >> frame; // get a frame from captures
        if(frame.empty())
        {
            cout << "Video over!" << endl;
            break;
        }
        //Show frame
        imshow("Video", frame);
    }
}

 

 

해결방법

현재 해결방법은 아래 환경설정을 기준으로 한다.

2022.11.19 - [언어, 라이브러리/OpenCV] - [OpenCV] Window, C++, VS Code에서 OpenCV 환경설정

 

결론부터 말하자면 코덱문제다. 코덱인 ffmpeg dll 파일을 프로젝트 폴더에 넣어줘야 한다.

 

1. 코덱 설치 확인

우선 아래 코드를 실행시켜 현재 ffmpeg가 빌드되어있는지 확인한다. FFMPEG 아래의 코덱들이 YES로 출력된다면 설치된것이다.

만약 설치가 안되어있다면 cmake에서 빌드할때 search에 ffmpeg를 검색해서 체크되어있는지 확인이 필요하다.

std::cout << cv::getBuildInformation() << std::endl;


============ 출력결과 ====================
Video I/O:
    DC1394:                      NO
    FFMPEG:                      YES
      avcodec:                   YES (58.109.100)
      avformat:                  YES (58.61.100)
      avutil:                    YES (56.60.100)
      swscale:                   YES (5.8.100)
      avresample:                NO
    GStreamer:                   NO
    v4l/v4l2:                    YES (linux/videodev2.h)

 

2. ffmpeg dll파일 프로젝트 폴더에 복사

ffmpeg dll 파일을 현재 사용중인 프로젝트 폴더에 복사한다.

64비트, opencv 4.6.0 기준으로 파일명은 opencv_videoio_ffmpeg460_64.dll 이다.

해당 파일은 다운받은 cmake로 빌드했던 소스파일 안에 있다.

ex) C:/opencv_src/opencv_build/bin

 

 

3. 그래도 안된다면

해당 증상으로 구글링을 했을때 가장 많은 증상이 비디오 파일의 경로 입력실수였다. 상대경로를 절대경로로 수정하고 해보는것을 추천한다.