OpenCV图像缩放后VideWriter无法工作

3
我是使用OpenCV 3和Visual Studio。问题在于我无法保存除默认全摄像头分辨率之外的任何特定分辨率的视频。没有错误,但视频文件大小不增长,保持在5.54kb。
以下是我的代码:
#include"opencv2\opencv.hpp"
using namespace cv;
using namespace std;

VideoCapture cap_cam1(0);

double Width = cap_cam1.get(CV_CAP_PROP_FRAME_WIDTH);
double Height = cap_cam1.get(CV_CAP_PROP_FRAME_HEIGHT); 
cv::Size frameSize(static_cast<int>(Width), static_cast<int>(Height));
string videoFileName = "D://current.avi";
VideoWriter cam1_write(videoFileName, CV_FOURCC('D', 'I', 'V', '3'), 10.0, frameSize, true);
Mat image;
int main()
{
    while (true)
    {
        cap_cam1 >> image;
        resize(image, image, Size(320, 240));
        imshow("image", image);
        cam1_write.write(image);
        if (waitKey(33) == 27)break;
    }

}

如果我删除resize函数,文件大小就会增加并添加帧数。 我还尝试在VideoWriter定义后添加以下行:
cap_cam1.set(CV_CAP_PROP_FRAME_WIDTH, 240);
cap_cam1.set(CAP_PROP_FRAME_HEIGHT,320);

我也尝试在VideoWriter的定义中更改分辨率,但文件大小仍为5.54kb。

如何在自定义分辨率下录制视频?


你是否混淆240x320和320x240分辨率? - MBo
使用VideoWriter cam1_write(videoFileName, CV_FOURCC('D', 'I', 'V', '3'), 10.0, cv::Size(320,240), true);来替代VideoWriter cam1_write(videoFileName, CV_FOURCC('D', 'I', 'V', '3'), 10.0, frameSize, true);在那里使用目标大小(你要调整的大小)... VideoWriter只允许写入一个目标大小。 - Micka
1个回答

2

您正在使用

double Width = cap_cam1.get(CV_CAP_PROP_FRAME_WIDTH);
double Height = cap_cam1.get(CV_CAP_PROP_FRAME_HEIGHT);
cv::Size frameSize(static_cast<int>(Width), static_cast<int>(Height));
VideoWriter cam1_write(videoFileName, CV_FOURCC('D', 'I', 'V', '3'), 10.0, frameSize, true);

这意味着您想使用VideoCapture图像大小编写视频。

在这里,您需要更改为

cv::Size targetSize = cv::Size(320,240);
VideoWriter cam1_write(videoFileName, CV_FOURCC('D', 'I', 'V', '3'), 10.0, targetSize, true);

现在在您的循环中使用

    resize(image, image, targetSize);

这意味着在创建VideoWriter时,您需要决定所需的输出图像大小。这是因为典型的编解码器假定具有恒定(已知)图像分辨率。

要设置分辨率,您有一些打字错误:

cap_cam1.set(CV_CAP_PROP_FRAME_WIDTH, 240);
cap_cam1.set(CAP_PROP_FRAME_HEIGHT,320);

这意味着分辨率为cv::Size(240,320),如果你将其更改为cv::Size(320,240),你的代码可能会起作用。请参考@MBo的评论。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接