在Visual Studio 2013中使用OpenCV与C++界面时,我在阅读某些视频文件时遇到困难.我已经能够阅读其他视频格式,所以相信我的代码是可以的.
问题视频文件是使用Go Pro拍摄的,并且是mp4.我可以在使用经典媒体播放器的OpenCV的同一台机器上播放它们.我使用MediaInfo收集视频文件的信息:
格式:MPEG-4格式配置文件:JVT编解码器ID:avc1文件大小:126 MiB
我尝试使用OpenCV的set函数显式提供fourcc代码,并提供divx作为代码和avc1,但没有运气.
我的程序代码如下:
int main(int argc, char** argv) {
if (argc != 2) {
help(argv);
system("Pause");
return 1;
}
std::string arg = argv[1];
VideoCapture capture;
capture.set(CV_CAP_PROP_FOURCC, CV_FOURCC('A', 'V', 'C', '1'));
capture.open(arg);
if (!capture.isOpened()) {
cerr << "Failed to open video file!\n" << endl;
help(argv);
system("Pause");
return 1;
}
return process(capture);
}
void help(char** argv) {
cout << "\n TBC" << endl;
}
int process(VideoCapture& src) {
Scalar const LOW_HSV_THRESHOLD(120, 45, 75);
Scalar const HIGH_HSV_THRESHOLD(140, 55, 85);
string windowName[] = { "Original", "HSV", "In Range", "Binary"};
namedWindow(windowName[0], CV_WINDOW_KEEPRATIO);
namedWindow(windowName[1], CV_WINDOW_KEEPRATIO);
namedWindow(windowName[2], CV_WINDOW_KEEPRATIO);
namedWindow(windowName[3], CV_WINDOW_KEEPRATIO);
Mat matOriginal;
Mat matHsv;
Mat matInRange;
Mat dst;
src >> matOriginal;
cvtColor(matOriginal, matHsv, CV_BGR2HSV);
GaussianBlur(matHsv, matHsv, Size(5, 5), 1.5);
cvtColor(matOriginal, matInRange, CV_BGR2GRAY);
threshold(matInRange, dst, 100, 255, THRESH_BINARY);
//inRange(matHsv, LOW_HSV_THRESHOLD, HIGH_HSV_THRESHOLD, matInRange);
imshow(windowName[0], matOriginal);
imshow(windowName[1], matHsv);
imshow(windowName[2], matInRange);
imshow(windowName[3], dst);
waitKey(0);
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激.
非常感谢,
凯文
出于文档目的,我已将我的评论扩展为此问题的解决方案.
用于Windows的预构建opencv库可能尚未使用ffmpeg支持进行编译,这使得可以读取多种视频格式.
一个quick'n'dirty解决方法是安装ffmpeg并将其添加到Windows PATH环境变量.
但是,正确的解决方案是在安装ffmpeg之后从源代码构建opencv库.通过使用CMake-GUI可以简化这一过程,它允许您轻松配置opencv的多个选项,例如添加ffmpeg支持(USE_FFMPEG标志).Cmake还将生成Visual Studio项目文件,以便您轻松编译库.
有关更详细的指南,请查看官方opencv文档页面上的视频指南
我发现了一个更快的解决方法,它恰好适用于我:
在项目发布文件夹(C:\ Users\Test\Projects\MyProject\Release)中复制文件opencv_ffmpeg2410.dll(2410来自opencv的使用版本,它可能与您不同).在Visual Studio中以发布模式运行项目,它可以工作.
您不需要进行任何其他修改:如果它可以读取网络摄像头捕获但不能读取视频文件,您只需将opencv_ffmpeg2410.dll复制到项目的Release文件夹中(您之前可能已复制其他已使用的dll的文件夹)来自opencv的bin文件夹).希望能帮助到你.
| 归档时间: |
|
| 查看次数: |
17825 次 |
| 最近记录: |