2015-12-04 57 views
2

當嘗試使用VideoCapture打開文件時,我無法獲得opencv 3.0.0(opencv網站的預編譯版本),甚至無法編譯。無法讀取opencv中的mp4文件3

我縮減我的代碼下降到只有這個:

#include "stdafx.h" 
#include <opencv/cxcore.h> 
#include <opencv2/core/mat.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <iostream> 
#include <opencv/cxcore.h> 
#include <opencv/highgui.h> 
#include <opencv/cv.h> 
#include <opencv2/opencv.hpp> 
#include <opencv2/core/core.hpp> 

#include <string> 
#include <cmath> 
#include <time.h> 

using namespace cv; 
using namespace std; 
int main() { 
    VideoCapture inputCap("C:/Users/user.name/Desktop/Video0022.mp4"); 
} 

和編譯它產生:opencv_ffmpeg300_64.dll : fata error LNK1107: invalid or corrupt file: cannot read at 0x408,在文件opencv_ffmpeg300_64.dll,第1行,列1

這是使用Visual Studio速成2012年,在Win 7機器上,使用C++編譯x64。我試着在發佈模式和調試模式下編譯代碼,並且它給出了相同的錯誤。該DLL是在鏈接器附加的依賴項,並且我有它在附加庫目錄中的庫。

這沒有奏效,環顧四周,我發現在Java和Python版本中,將目錄添加到路徑變量有時會起作用。那麼,重新啓動,再試一次,同樣的錯誤。

然後,我開始在任何可能有用的地方添加dll - 全部通過My Documents/Visual Studio 12/Projects/ProjectName文件夾,在opencv文件夾中的多個位置,並且仍然是相同的錯誤。

我也嘗試關閉啓用增量鏈接,並沒有工作。

我敢肯定這不是一個編解碼器的問題,因爲這是在OpenCV中2.4.7/Visual Studio的10個工作(我重命名的文件OpenCV的2文件夾不亂用OpenCV的3.0.0安裝)。

視頻本身很好,我可以打開它在VLC和Windows媒體播放器沒有問題,並與舊的opencv的東西。

如果我從鏈接器附加的依賴項中刪除了dll,我實際上可以編譯.cpp,但它從來沒有真正打開該文件(inputCap.isOpened()總是返回false)。不過,我可以毫無問題地打開網絡攝像頭。

-

編輯:我改變了發佈運行時庫/ MT,而不是/ MD,取消了對調試都和鏈接器的其它依賴的發行版現在無論是發佈opencv_ffmpeg300_64.dll和對該視頻文件進行調試編譯並正常工作。

回答

0

(沒有意識到ettiquite用一個問題來回答,如果我解決我自己的問題,哎呦)通過改變釋放的運行時庫/ MT的不是/ MD

設法解決它,拆了opencv_ffmpeg300_64.dll在連接器的調試版本和發行版本上都有額外的依賴關係,現在版本和調試版本都可以編譯,並且可以很好地處理該視頻文件。