Здравствуйте. Передо мной поставлена задача экспортировать данные полученные от датчиков в формат mp4. Я изучил материла по теме и понял что для этого достаточно циклически записывать кадры через VideoWriter. Но при этом на выходе оказывается пустой файл.
cv::VideoWriter out;
int FPS = 10;
out.open("output_vid.mp4",cv::VideoWriter::fourcc('m','p','4','v'), FPS, cv::Size(800, 600));
Mat data, image;
if (datafile.isopen())
{
while(!datafile.atEnd())
{
...
data.create(height, width, CV_8UC4); //разрешение 800*600
data.convertTo(image, CV_8UC3, 1, 0); //UPD: При конвертации число каналов не меняется.
out.write(image);
}
}
out.release();
Операция конвертации была добавлена в результате сравнивая в режиме отладки с кодом туториала. В нем матрица имеет тип CV_8UC3
while (inputVideo.isOpened())
{
Mat frame;
bool bSuccess = inputVideo.read(frame);
if (bSuccess == false) break;
out.write(frame);
}
Что еще нужно учесть? Или это изначально нерабочий вариант и нужно действовать через двойную конвертацию И собирать Mp4 из JPG изображений?
Разобрался. Неправильно производил конвертацию.
Mat data(800, 600, CV_8UC4);
Mat data_exp(800, 600, CV_8UC3);
cvtColor(data, data_exp, cv::COLOR_RGBA2RGB );