2012-09-05 4 views
6

Windows XP 32 비트에서 OpenCV 2.4.2로 VideoCapture 클래스를 사용하는 데 문제가 있습니다. 파일이나 카메라를 열지 못하고 고치는 것이 고통 스럽습니다. Im Visual Studio 2010을 사용하고 있지만 QTcreator에서 같은 결과를 얻은 코드도 시도했습니다.VideoCapture Windows에서 OpenCV 2.4.2 오류

테스팅 코드는 다음과 같다 :

#include "opencv/cv.h" 
#include "opencv/highgui.h" 
#include <iostream> 
#include <string> 
#include <iomanip> 
#include <sstream> 

using namespace cv; 
using namespace std; 

int main() 
{ 
    const char* videoPath = "C:/video/"; 
    string videoName = string(videoPath) + "avi.avi"; 
    VideoCapture cap(videoName); 

    if(!cap.isOpened()) 
    { 
     std::cout<<"Fail"<<std::endl; 
     return -3; 
    } 
    return 0; 
} 

출력은 항상 '-3'. 나는 그것을 디버깅 파일을 여는 중 오류 (../../modules/highgui/src/cap_ffmpeg_impl.hpp:361)

및 문제의 첫 번째 줄에 나타납니다 : Qt는 창조주는 경고를 보여줍니다

CvCapture* cvCreateFileCapture_FFMPEG_proxy(const char * filename) 
{ 
    CvCapture_FFMPEG_proxy* result = new CvCapture_FFMPEG_proxy; 
    if(result->open(filename)) 
     return result; 
    delete result; 
#if defined WIN32 || defined _WIN32 
    return cvCreateFileCapture_VFW(filename); 
#else 
    return 0; 
#endif 
} 

cap_ffmpeg.cpp 내부 파일

나는 스노우 레오파드 (snow leopard) 아래 맥에서 같은 코드를 테스트했으며 작동한다. 도서관 문제이기 때문에 여기에 놀라움이 없습니다. c-function cvCapture를 사용하여 동일한 경로 경로로 avi 파일을 쉽고 빠르게 열었습니다. mi 디버그 파일에 포함 된 'C : \ opencv \ opencv \ build \ x86 \ vc10 \ bin'의 모든 dll 파일을 받았습니다. 나는 tbb.dll과 모든 'C : \ opencv \ opencv \ 3rdparty \ ffmpeg'콘텐츠도 포함 시켰습니다.

이것은 나를 미치게 만들어서 도움이 될 것입니다.

미리 감사드립니다.

+0

첫 번째 답변은 [이 질문] (http://stackoverflow.com/questions/1987782/why-opencvs-cvcreatecameracure-and-cvcreatefilecapture-do-not-work-how)이 될 수 있습니다. opencv_ffmpeg242d를 복사 해보십시오. .dll 또는 opencv_ffmpeg242.dll을 현재 작업 디렉토리로 복사하십시오. 또한 OpenCV를 직접 만들었습니까? 모든 의존성이 괜찮은가요? – Sassa

+0

나는 여전히 같은 문제가있다. 아마도 일부 포럼에서 코덱 업데이트가 필요하다고 읽었습니다. 나는 그것을 시도 할 것이다. 문제를 해결 했습니까? –

답변

5

내 경우에는 opencv_***.dll 개의 파일을 모두 삭제 한 후에도 동일한 문제가 해결되었습니다. C:\Windows\System32. 그래서, 그냥 "%PATH%;C: \Program Files \OpenCV2.4.2\build\x86\vc10/bin" 같은 경로를 통해 DLL 파일을 사용합니다. 그것을 시도하십시오.

+0

감사합니다. – Cits

+0

(보수적으로) 나는 Windows \ System32에서 모든 opencv _ *. dll 파일을 이동하고 Windows \ SysWOW64에서도 이동하려고했습니다. 재부팅 되더라도 여전히 작동하지 않습니다. dll을 압축하고 원본을 제거했습니다. 재부팅 되니 정말 좋았습니다! 따라서 권영식의 제안은 매우 좋습니다. –

3

나는이 문제에 직면하고 함수의 올바른 경로에 의해 그것을 해결 :

: does't 존재 videoName의 AVI 파일, 그것은 오류가있을 경우

VideoCapture cap(videoName); 

(../../modules/highgui/src/cap_ffmpeg_impl.hpp:XXX) 

여기서 XXX는 회선 번호를 나타냅니다.

0

Windows 8 (64 비트), opencv 2.4.10에서 실행되는 동안 열린 방법과 동일한 문제가있었습니다. IDE가 x86에서 실행 중입니다.

릴리스 구성에서 응용 프로그램을 실행하면 문제가 해결 된 것으로 나타났습니다.

나는 imread와 동일한 문제가 있었기 때문에 답을 찾지 못했습니다. 문제는이 스레드에 표시됩니다. imread not working in Opencv

0

아래에서 발견 한 mp4 파일의 수정 사항을 참조하십시오. OpenCV 2.4.9를 사용하여 Windows 7에서도 같은 문제가 발생했습니다. opencv 용 Java 래퍼를 사용하고 있습니다.

Matthias Krings는이를 위해 많은 연구를 수행했습니다. this을 참조하십시오. 분명히 이것은 비디오 파일 형식을 기반으로하는 문제입니다. .avi 파일을 사용하면 많은 사람들에게 적합합니다. 불행히도 그의 OPENCV_DIR 설정 솔루션은 나에게 도움이되지 못했습니다. 그러나 버그 목록에있는 그의 의견은 나에게이 문제를 해결할 수있는 힌트를 주었다.디렉토리 {opencv\install\dir}opencv-2.4.9\build\x86\vc10\bin를 포함

  1. 설정 java.library.path :

    는 두 가지 작업을 수행해야합니다. java 명령 행의 -D 옵션을 사용하여 변수를 설정할 수 있습니다 : java -Djava.library.path=PATH_TO_YOUR_DLL .... 또한 사용자 환경에서 System.getProperty(...)을 사용하여이 변수를 가져 와서 loadLibrary()을 호출하기 전에 인쇄하여 경로 설정이 작동하는지 확인하십시오.

  2. 그리고 Java 클래스에서 System.loadLibrary("opencv_ffmpeg249");을 사용하여 ffmpeg dll을로드하십시오. loadLibrary() 함수는 java의 static block에서 호출해야합니다.
  3. 우리가 설정 한 java.library.path에는 opencv_ffmpeg249.dll이라는 파일이 있습니다.
  4. 우분투에서도 작동합니다 (.so 파일).
0

나는 또한 똑같은 문제에 직면하여 입력 비디오의 올바른 위치를 지적한 후에 해결했습니다.