【发布时间】:2014-04-20 18:45:10
【问题描述】:
在 Visual Studio 2013 中通过 C++ 接口使用 OpenCV 时,我在阅读某些视频文件时遇到了困难。我已经能够阅读其他视频格式,所以相信我的代码没问题。
问题视频文件是使用 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;
}
}
任何帮助将不胜感激。
非常感谢,
凯文
【问题讨论】:
-
你使用的是支持 ffmpeg 编译的 opencv 吗?
-
可能不是,在 Visual Studio 中设置 OpenCV 时,我刚刚从 SourceForge(从 OpenCV 站点重定向)下载了标准包,并且只包含了头文件和库文件。所以在回答我不太确定。
-
会试一试。非常感谢。