我正在OpenCV(2.4.8)中创建一个程序,该程序应该读取视频文件并对其进行一些计算。对于这些计算,我不需要高分辨率帧,我完全可以使用640 * 360作为分辨率。
在早期的测试中,我连接了网络摄像头,并使用了:
VideoCapture cap(0);
cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 360);
Mat image;
cap.read(image);
namedWindow("firstframe", 1);
imshow("firstframe", image);
waitKey(0);
完美地调整了图像的大小。现在我进入下一步,我想使用我的程序来存储视频,而不是实时馈送(我用于测试)。当我使用源文件路径(字符串)更改"0"时,文件已加载,但分辨率仍为 1920*1080。
我做错了什么吗?有没有办法"即时"以较低的分辨率加载视频?
我已经阅读了OpenCV文档。某些设置标记为"仅限相机",但此设置不是:http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture-videocapture
我在Mac上使用OpenCV,并使用MacPorts安装它。
如果需要更多详细信息,请告诉我。
提前感谢您的帮助
编辑:我已经意识到 cap.set(...) 函数返回一个布尔值,所以我尝试将它们打印出来,它们都返回 0。这当然证实了框架没有调整大小。仍然不知道为什么...
编辑 2 :所以现在,对于临时解决方案,我在读取(图像)后使用以下行:
resize(image, image, Size(640, 360), 0, 0, INTER_CUBIC);
这行得通。但我猜这不是真正的最佳解决方案。
使用
resize(image, image, Size(640, 360), 0, 0, INTER_CUBIC);
读取后(图像)似乎是解决此问题的最佳解决方案。因此,总(测试)代码变为:
VideoCapture cap("path/to/file");
cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 360);
Mat image;
cap.read(image);
resize(image, image, Size(640, 360), 0, 0, INTER_CUBIC);
namedWindow("firstframe", 1);
imshow("firstframe", image);
waitKey(0);
如果有人知道更好的方法,请告诉我。