i'm trying to save a video using openCV with mitigated success. My (simplified) code is pretty basic:
const cv::Mat imgDisplay16( mHeight, mWidth, CV_16U, aImage.data() );
mWriter = std::make_unique<cv::VideoWriter>( "file.avi", cv::VideoWriter::fourcc( 'M', 'J', 'P', 'G' ), 10, imgDisplay16.size(), false );
mWriter->write( imgDisplay16 );
//cv::imwrite( "path.png", imgDisplay16 );
The problem is that the resulting video is missing the right half of the image, see captures below. The image is also really ugly, but thats another problem.
Im just starting with openCV so it may be a basic error.
Thanks
if it can be useful, there is this in my log
[ INFO:0@4.737] global videoio_registry.cpp:244 cv::`anonymous-namespace'::VideoBackendRegistry::VideoBackendRegistry VIDEOIO: Enabled backends(9, sorted by priority): FFMPEG(1000); GSTREAMER(990); INTEL_MFX(980); MSMF(970); DSHOW(960); CV_IMAGES(950); CV_MJPEG(940); UEYE(930); OBSENSOR(920)
[ INFO:0@4.737] global backend_plugin.cpp:383 cv::impl::getPluginCandidates Found 3 plugin(s) for FFMPEG
[ INFO:0@4.737] global plugin_loader.impl.hpp:67 cv::plugin::impl::DynamicLib::libraryLoad load C:\Git\ino_cameraapi\out\build\x64-Debug\bin\opencv_videoio_ffmpeg481_64d.dll => FAILED
[ INFO:0@4.738] global plugin_loader.impl.hpp:67 cv::plugin::impl::DynamicLib::libraryLoad load opencv_videoio_ffmpeg481_64d.dll => FAILED
[ INFO:0@4.741] global plugin_loader.impl.hpp:67 cv::plugin::impl::DynamicLib::libraryLoad load opencv_videoio_ffmpeg481_64.dll => OK
[ INFO:0@4.741] global backend_plugin.cpp:50 cv::impl::PluginBackend::initCaptureAPI Found entry: 'opencv_videoio_capture_plugin_init_v1'
[ INFO:0@4.741] global backend_plugin.cpp:169 cv::impl::PluginBackend::checkCompatibility Video I/O: initialized 'FFmpeg OpenCV Video I/O Capture plugin': built with OpenCV 4.8 (ABI/API = 1/1), current OpenCV version is '4.8.1' (ABI/API = 1/1)
[ INFO:0@4.741] global backend_plugin.cpp:69 cv::impl::PluginBackend::initCaptureAPI Video I/O: plugin is ready to use 'FFmpeg OpenCV Video I/O Capture plugin'
[ INFO:0@4.741] global backend_plugin.cpp:84 cv::impl::PluginBackend::initWriterAPI Found entry: 'opencv_videoio_writer_plugin_init_v1'
[ INFO:0@4.741] global backend_plugin.cpp:169 cv::impl::PluginBackend::checkCompatibility Video I/O: initialized 'FFmpeg OpenCV Video I/O Writer plugin': built with OpenCV 4.8 (ABI/API = 1/1), current OpenCV version is '4.8.1' (ABI/API = 1/1)
[ INFO:0@4.741] global backend_plugin.cpp:103 cv::impl::PluginBackend::initWriterAPI Video I/O: plugin is ready to use 'FFmpeg OpenCV Video I/O Writer plugin'
and i am in windows 10, openCV 4.8.1
VideoWriter expect 8bits data, so we need to convert the CV_16U image to a CV_8U image.
Working code is
const cv::Mat imgDisplay16( mHeight, mWidth, CV_16U, aImage.data() );
cv::Mat imgDisplay8;
imgDisplay16.convertTo( imgDisplay8, CV_8U, 1.0/256);
mWriter = std::make_unique<cv::VideoWriter>( "file.avi", cv::VideoWriter::fourcc( 'M', 'J', 'P', 'G' ), 10, imgDisplay16.size(), false );
mWriter->write( imgDisplay8 );