OpenCV VideWriter не работает после изменения размера изображения

Я использую OpenCV 3 и Visual Studio.
Проблема заключается в том, что я не могу сохранить видео для какого-либо конкретного разрешения, кроме разрешения по умолчанию для полной камеры.
Нет ошибки, но видеофайл не увеличивается. Это остается в 5.54 КБ.

Вот мой код:

#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,54 КБ.

Как записать видео в произвольном разрешении?

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]