将视频保存为输入而不是android中的相机
Posted
技术标签:
【中文标题】将视频保存为输入而不是android中的相机【英文标题】:Saved video as input instead of Camera in android 【发布时间】:2014-08-10 10:09:03 【问题描述】:我已经实现了一个实现 CvCameraListener 接口的 android 应用程序。在 onCameraFrame(Mat inputFrame) 方法中,我处理从相机捕获的 inputFrame。 现在我的问题是:有没有办法可以使用手机上保存的视频文件作为输入,而不是直接从相机获取帧?这意味着我希望以 Mat 格式逐帧输入视频文件。
有没有办法做到这一点?
感谢您的回答
【问题讨论】:
没那么容易。 opencv 在这里没有提供方法。 那很不幸.. 没有opencv还有其他方法吗?例如获取位图?然后我仍然可以转换它们 哦,当然,您可以将单个图像写入/读取到 sdcard,没问题。 您可以每秒保存例如视频文件中的 3 张图片,然后将它们加载到位图中? 【参考方案1】:虽然它没有经过测试,而且我在 Android 上的 OpenCV 方面没有太多经验。不过,您可以这样尝试:
//[FD : File descriptor or path.]
Bitmap myBitmapFrame;
MediaMetadataRetriever video_retriever = new MediaMetadataRetriever();
try
retriever.setDataSource(FD);
myBitmapFrame = retriever.getFrameAtTime(..);
catch(...
:
Utils.bitmapToMat(myBitmapFrame, myCVMat);
您可能必须实现一些回调系统,因为在初始化后您只能使用 OpenCV。此外,您可以将帧数转换为时间码。
祝你好运,编码愉快。 :)
【讨论】:
感谢您的回答。目前我很忙,但我会尽快尝试。如果可行,将提供反馈 感谢工作:) 一个问题。我用手机摄像头录制了一段视频。但是,当我遍历 getFrameAtTime 时,它以某种方式仅在视图上每秒返回一个图像,尽管我的循环看起来像检索器.getFrameAtTime(time);时间 += 200000; (每 0.2 秒一张图片)可能是什么问题? 我很高兴它成功了 :) 对于您的下一个问题,我需要查看代码才能弄清楚。我的建议是也尝试使用几种不同类型/编码的视频。 是这样的: public Mat onCameraFrame(Mat inputFrame) bitmap =retriever.getFrameAtTime(nextFrame);下一帧 += 200000; utilis.bitmapToMat(位图,垫子);返回垫子;所以我只是使用 onCameraFrame 作为循环,然后在 camerapreview 上显示检索到的位图。视频是标准录制的,没什么特别的。但我每秒只能预览一张图片,而不是更多。 另外我旋转位图,因为它是 640*480 而不是 480*640。会不会是这个问题?以上是关于将视频保存为输入而不是android中的相机的主要内容,如果未能解决你的问题,请参考以下文章
Android 如何将捕获的视频设置为 .mp4 而不是 .3gp