Я использую 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 КБ.
Как записать видео в произвольном разрешении?
ты используешь
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
Других решений пока нет …