OpenCV VideoWriterfourCC Android

Posted

技术标签:

【中文标题】OpenCV VideoWriterfourCC Android【英文标题】:OpenCV VideoWriter fourCC Android 【发布时间】:2016-10-12 04:20:43 【问题描述】:

我在我的项目中使用适用于 android 的 OpenCV 3.1 库来处理图像并基于几个单独的 OpenCv::Mat 编译视频文件。

我的问题是找到正确的fourCC代码。在 Google Nexus 6P (Android 7.0) 上使用“MJPG”可以正常工作,但在 Nexus 4 (5.1.1) 或 Galaxy A3 (6.0.1) 上则不行。

在代码中,images 是一个数组,其中包含图像数据作为字节数组。

VideoWriter videoWriter = new VideoWriter(filePath, VideoWriter.fourcc('M','J','P','G'), FPS, new Size(w,h));
videoWriter.open(filePath, VideoWriter.fourcc('M','J','P','G'), FPS, new Size(w,h));

for (int i = 0; i < images.size(); i++) 
     byte[] image = images.get(i);
     Mat rgbMat = new Mat(h,w,CvType.CV_8UC3);
     rgbMat.put(0,0,image);

     videoWriter.write(rgbMat);
     rgbMat.release();



videoWriter.release();

正如我所说,我在 Nexus 6P 上获得了一个有效的 .avi 文件,但在其他手机上却是一个损坏的文件。我知道我的管道的其余部分适用于所有手机,因为我可以毫无问题地保存单个图像(不使用 OpenCV)。

我的问题:是否有一个可以在任何手机上使用的fourCC代码,独立于制造商?

我尝试了但没有成功:'MPEG'、'MP4V'、'PIM1'

感谢您的帮助!

【问题讨论】:

好吧,同时我在OpenCV论坛上找到了一个参考:目前Android库只支持'MJPG'fourCC代码。 使用 OpenCv 3.20 时遇到同样的问题。使用 MJPGfourcc 代码创建的 .avi 文件无法在我的 Android 6 手机中播放,也无法在 Windows 10 默认媒体播放器中播放。相反,可以在 VLC 媒体播放器上看到 ok。也许 VideoWriter 中的一些附加设置会使其对所有人兼容?你在这方面做了更多工作吗? 【参考方案1】:

如果你在 onCameraFrame 中使用 mVideoWriter 覆盖它,它每次都会初始化,所以使用下面提到的一些条件。

 if (mVideoWriter == null) 
            mVideoWriter = new VideoWriter();
            Log.d(TAG, "mVideoWriter good : " + mVideoWriter);
            mVideoWriter.open(file_path.toString() + "/" + System.currentTimeMillis() + ".avi", VideoWriter.fourcc('M', 'J', 'P', 'G'), 30.0, mRgba.size());
            Log.i(TAG, "onCameraFrame: recordFilePath");


        
        if (!mVideoWriter.isOpened()) 
            Log.w(TAG, "onCameraFrame: open");
            mVideoWriter.open(path.toString() + "/" + System.currentTimeMillis() + ".avi", VideoWriter.fourcc('M', 'J', 'P', 'G'), 30.0, mRgba.size());

        

【讨论】:

【参考方案2】:

问题是 Android 中的 VideoWriter 仅支持 .avi 格式。这是一个示例解决方案。

if (videoWriter.isOpened() == false) 
    Log.w("wewe", "som tu OPEN");
    videoWriter.open("/sdcard/movies/video.avi", VideoWriter.fourcc('M', 'J', 'P', 'G'), 25.0D, colorMat.size());
 else 
    videoWriter.write(colorMat);

【讨论】:

以上是关于OpenCV VideoWriterfourCC Android的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV实战——OpenCV与图像处理

cmake错误:opencv2/opencv.hpp:opencv2/opencv.hpp:没有这样的文件或目录

opencv相机标定

opencv4opencv视频教程 C++(opencv教程)1opencv介绍和环境搭建

如何使用opencv实现图像匹配

OpenCV 简介 携手走进 OpenCV 的世界