cv::Mat im1;
cv::VideoCapture vidCapture;
vidCapture.set(CV_CAP_PROP_FRAME_WIDTH, 313);
vidCapture.set(CV_CAP_PROP_FRAME_HEIGHT, 621);
vidCapture.open("Image1.avi");
vidCapture.grab();
vidCapture.retrieve(im1);
cv::imwrite("test.bmp", im1);
我使用OpenCv从摄像机捕获并记录了8位灰度视频 . 视频尺寸为313x621,因为相机前面有一些自定义镜头 . 不幸的是,这似乎打破了cv :: VideoCapture,即使OpenCv编码视频很好 . 我可以使用媒体播放器,VLC等打开并播放视频 .
当我使用OpenCV抓取一个帧时,我看到的只是一个彩色图像的通道 . 我也尝试过:
vidCapture.retrieve(im1, CV_LOAD_IMAGE_GRAYSCALE);
这产生与上面相同的图像,其中看起来OpenCv正在捕获彩色视频的一个通道 . 我使用以下方法存储图像:
CvVideoWriter* writer1 = cvCreateVideoWriter("Image1.avi", -1, 60.0, cvGetSize(videoFrames->back()), 0);
它成功地创建了一个8位灰度视频 .
什么工作,如果我将视频帧填充到480x640 . 突然之间OpenCv成功解码了视频 . 虽然这是一个选项,但它非常令人沮丧,因为我必须批量转换我的所有视频,打开它们,然后重新裁剪到313x621进行后期处理 .
1 回答
您应该检查VideoCapture的后端是否支持CV_CAP_PROP_FRAME_WIDTH和CV_CAP_PROP_FRAME_HEIGHT的设置 . 它可以通过以下方式完成:
如果retCPFW或retCPFH等于0.0,则无法手动设置属性 .
您还应尝试在不设置属性的情况下阅读视频: