當嘗試使用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和對該視頻文件進行調試編譯並正常工作。