use*_*803 9 opencv resolution video-capture dimensions
我正在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);
Run Code Online (Sandbox Code Playgroud)
这完美地调整了图像的大小.现在我进入下一步,我想用我的程序存储视频而不是实时源(我用于测试).当我用源文件路径(字符串)更改'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);
Run Code Online (Sandbox Code Playgroud)
这很有效.但我猜这不是最理想的解决方案.
运用
resize(image, image, Size(640, 360), 0, 0, INTER_CUBIC);
Run Code Online (Sandbox Code Playgroud)
读(图像)之后似乎是解决这个问题的最佳解决方案.所以总(测试)代码变成:
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);
Run Code Online (Sandbox Code Playgroud)
如果有人知道更好的方法,请告诉我.