在android中使用opencv捕获视频帧

Posted

技术标签:

【中文标题】在android中使用opencv捕获视频帧【英文标题】:Capture video frames with opencv in android 【发布时间】:2016-01-31 07:51:23 【问题描述】:

我正在尝试使用 opencv-android 实时处理 android 视频。到目前为止,我可以使用 opencv 访问视频,并将其显示在 org.opencv.android.JavaCameraView 上。(我提到了 this link)我无法按帧访问相机的视频源。我需要获取每一帧,以便在它们上应用一些 opencv 算法以进行对象跟踪。请建议一种使用 opencv 访问和处理帧的方法。 (如果已被询问,请重定向)

【问题讨论】:

【参考方案1】:

这是怎么做的:

 public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) 
    //Do your processing here, for example:
    Mat image = inputFrame.rgba();
    Mat ret_mat=new Mat();
    Core.add(image, new Scalar(40, 40, 40, 0), ret_mat); //change brightness of video frame

    return ret_mat;

OpenCv 函数使用 Mat 对象进行操作,该对象表示图像/帧的像素矩阵。上面的代码让每一帧都亮了 40 个单位。

【讨论】:

但是我如何首先将“CameraBridgeViewBase.CvCameraViewFrame inputFrame”作为参数传递? 'CameraBridgeViewBase' 是否提供任何从中获取帧的方法? 这是你必须重写的方法。请参阅您提供的链接中的第 11 点。您的 Activity 实现了 CameraBridgeViewBase.CvCameraViewListener2。这是我的完整代码:pastebin.com/DT9PtfCY 我编辑了我的评论,查看完整的工作活动代码,如果它解决了您的问题,请不要忘记将我的答案标记为有用。 我们可以将存储的 mp4/avi 视频转换为帧,并可以使用 OnCameraFrame() 代替相机帧;

以上是关于在android中使用opencv捕获视频帧的主要内容,如果未能解决你的问题,请参考以下文章

Qt OpenCV从捕获帧写入视频,不保存

OpenCV,Android:从图像中检测对象而不是实时检测

在 Android 上从视频播放中捕获 YUV 帧

在 Android 上的 OpenCV 中逐帧处理视频

如何在 Android 中捕获 VideoView 的屏幕截图或视频帧

使用opencv将视频写入文件时遇到问题