在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捕获视频帧的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV,Android:从图像中检测对象而不是实时检测