OpenCV的Android环境具体搭建过程,请参考 Android 使用OpenCV的三种方式(Android Studio),并不在本文的范围之内。本文将OpenCV需要的依赖打成了opencvlib-release.aar包,关于aar包的打包和使用,请参考 Android Studio中打包aar并引用及打jar包
本文旨在介绍OpenCV打开相机,获取缓冲帧并保存的方法。OpenCV中用于显示相机缓冲界面的类为JavaCameraView,该类间接继承自SurfaceView。
相机显示的JavaCameraView的显示的代码如下:
//初始化CameraView
mCameraView = new JavaCameraView(this, mCameraIndex);
mCameraView.setMaxFrameSize(size.width, size.height);
mCameraView.setCvCameraViewListener(this);

第一行传入Context对象及相机编号,第二行设置缓冲帧的宽高,第三行设置了 CvCameraViewListener2的回调。 CvCameraViewListener2的三个实现方法: 1、onCameraStarted(int width, int height) 相机预览开始回调,width,height分别表示帧的款和高。在本实例中,可以再menu选项中修改相机的分辨率,具体效果读者可以自己运行附件体验。 注意:初始化相机是一个异步过程,在在调用了JavaCameraView的enableView方法后,并不能马上使用,需要在onCameraStarted方法中进行后续操作。例如本例中存储像素的矩阵初始化: mBgr  =  new  Mat() ; 这行代码需要在JavaCameraView初始化完成后调用,否则你可能会得到一个.so库的link错误:
java.lang.UnsatisfiedLinkError: No implementation found for void org.opencv.core.Mat.n_delete(long) (tried Java_org_opencv_core_Mat_n_1delete and Java_org_opencv_core_Mat_n_1delete__J)

看下Mat类的源码:
public Mat() {
this.nativeObj = n_Mat();
}
再往下看: private static native long  n_Mat() ; 我们会发现,原来n_Mat()是一个native方法,Mat对象是一个C++对象,而这个C++类的在 libopencv_java3.so包中,在加载完该.so包之前我们的Mat类是不能使用的。
2、onCameraViewStopped() 官方文档对该方法的描述为: This method is invoked when camera preview has been stopped for some reason. No frames will be delivered via onCameraFrame() callback after this method is called. 从文档来看,本方法在相机缓冲帧本停止时调用,但停止的原因可能包括不可预见的异常停止。在该方法中可以做相机缓冲界面的善后工作。
3、public Mat onCameraFrame(CvCameraViewFrame inputFrame) 该方法获取到相机缓冲的每一帧,包含了缓冲帧的RGBA像素矩阵,实例中实现:
@Override
public Mat onCameraFrame(final CvCameraViewFrame inputFrame) {
final Mat rgba = inputFrame.rgba();

if (mIsPhotoPending) {
mIsPhotoPending = false;
takePhoto(rgba);
}

if (mIsCameraFrontFacing) {
// Mirror (horizontally flip) the preview.
Core.flip(rgba, rgba, 1);
}

return rgba;
}
项目Github地址:https://github.com/BruceT2010/OpenCV4AndroidSecondSight

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. android上一些方法的区别和用法的注意事项
  5. android实现字体闪烁动画的方法
  6. Android中dispatchDraw分析
  7. Android四大基本组件介绍与生命周期
  8. Android(安卓)MediaPlayer 常用方法介绍
  9. 在Fragment中设置控件点击方法,执行失败。

随机推荐

  1. 专项测试(三)内存泄漏调试经验分享 (一)
  2. Android(安卓)在线视频播放器(Vitamio)
  3. Android(安卓)targetSdkVersion了解一下
  4. android小白感悟:Android(安卓)Studio安装
  5. 详解Android中AsyncTask的使用
  6. Android读写XML(中)——SAX
  7. Android的ADB工具使用
  8. Android的内存泄露测试 mat
  9. Android位图操作
  10. [笨木头Cocos2dx045]让输入框在Android上