我正在從EmguCV交換到OpenCV,這樣我就可以嘗試一些尚未被EmguCV包裝的OpenCV函數。不過,我無法加載我的簡單測試視頻文件,該文件在EmguCV中沒有問題。看看EmguCV源代碼,我注意到他們調用OpenCV C函數而不是C++來初始化文件(或網絡攝像機)的捕獲,所以我寫了下面的測試代碼(在this answer的幫助下)。這是我簡單的代碼爲什麼視頻文件不能在OpenCV中打開(包括C&C++ API)?
int _tmain()
{
string filename = "sample.wmv";
if (!FileExists(filename.c_str))
{
cout << "File does not exist" << endl;
return -1;
}
else
{
cout << "File exists" << endl;
VideoCapture cap (filename);
if(!cap.isOpened())
{
cout << "Failed to open file in OpenCV C++" << endl;
//Trying C API too just-in-case
CvCapture* capture = cvCreateFileCapture(filename.c_str());
if (!capture)
{
cout << "Failed to open file in OpenCV C" << endl;
}
else
{
//Grab frames and do stuff
cvReleaseCapture(&capture);
}
return -1;
}
else
{
//Grab frames and do stuff
}
}
return 0;
}
當我運行此我得到的輸出
File exists
Failed to open file in OpenCV C++
Failed to open file in OpenCV C
這種情況無論文件,即它發生在「sample.wmv」,「SAMPLE.AVI」甚至還有一個OpenCV示例文件「tree.avi」。
爲什麼?到底是怎麼回事?
(我在Windows 8和Windows 8.1中機中運行的OpenCV 2.4.6。)
你對你的系統有必要的權限嗎?你可以用opencv打開任何東西(例如圖像或XML文件等)嗎? – alrikai
是的 - jpeg打開罰款。另外EmguCV項目成功地打開了相同的視頻文件。 – dumbledad
你有樣品嗎?我可以爲你嘗試它,然後我會讓你知道它是否正常工作。 – Mzk