2012-09-05 60 views
6

在Windows XP 32位下,使用VideoCapture類與OpenCV 2.4.2時出現問題。 它不打開任何文件或相機,並修復它是一個痛苦。 即時通訊使用Visual Studio 2010,但我也嘗試了與QTcreator中的代碼具有相同的結果。Windows中的VideoCapture 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'。 Qt創建者顯示警告 :錯誤開口文件(../../modules/highgui/src/cap_ffmpeg_impl.hpp:361)

我調試它和問題出現在第一行:

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內部文件中。

我已經下雪豹Mac上測試相同的代碼和它的作品。這裏沒有什麼驚喜,因爲它一定是一個圖書館問題。 我已經使用c函數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-cvcreatecameracapture-and-cvcreatefilecapture-do-not-work-how)可能是你的情況:嘗試複製opencv_ffmpeg242d .dll或opencv_ffmpeg242.dll到您當前的工作目錄。另外,你自己建立了OpenCV嗎?你確定所有的依賴關係都可以嗎? – Sassa

+0

我仍然有同樣的問題。我在某些論壇上看到可能需要更新編解碼器。我會嘗試。你解決了這個問題嗎? –

回答

5

在我的情況下,同樣的問題在刪除所有C:\Windows\System32文件opencv_***.dll後得到解決。所以,我通過像"%PATH%;C: \Program Files \OpenCV2.4.2\build\x86\vc10/bin"這樣的路徑使用dll文件。請嘗試。

+0

謝謝,這工作! – Cits

+0

我(保守地)試圖將所有opencv _ *。dll文件移出Windows \ System32,也移出Windows \ SysWOW64。重新啓動,仍然沒有工作。壓縮dlls並刪除原件;重新啓動,這工作很好!所以Young-Shik Kwon的建議非常好。 –

3

我也面臨着這個問題,並解決它由函數的正確路徑:

VideoCapture cap(videoName); 

如果開不存在videoName的AVI文件,這將是一個錯誤:

(../../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包裝。

馬蒂亞斯Krings已經做了很多的研究這一點。見this。顯然這是基於視頻文件類型的問題。使用.avi文件,它似乎適用於很多人。不幸的是,他設置OPENCV_DIR的解決方案並不適合我。但是他在錯誤列表中的評論給了我一個解決這個問題的提示。

你必須做兩件事情:

  1. 設置java.library.path包括目錄{opencv\install\dir}opencv-2.4.9\build\x86\vc10\bin。您可以在java命令行上使用-D選項來設置變量:java -Djava.library.path=PATH_TO_YOUR_DLL ...。也可以使用System.getProperty(...)從您的環境中獲取此變量,並在調用loadLibrary()之前打印它,以驗證路徑設置是否正常。
  2. 而在你的java類中,使用System.loadLibrary("opencv_ffmpeg249");加載ffmpeg dll。應該從java中的static block內調用loadLibrary()函數。
  3. 我們設置的java.library.path中有一個名爲opencv_ffmpeg249.dll的文件。
  4. 這也適用於Ubuntu的.so文件。
0

我也面臨同樣的問題,並指出輸入視頻的正確位置後解決。