【OpenCV for Android】(二)相机的使用— —实时视频预览、拍照和相册读取

绪论

对于Android移动端的相机调用及数据读取,OpenCV是把原来C++的部分与本地AndroidSDK进行了整合,通过桥接的方式调用Android手机摄像头,最重要的一个类是JavaCameraView,它是OpenCV中调用Android手机摄像头的接口类,支持以代码和XMLView配置的方式使用,可以在Android设备中使用摄像头完成前置与后置摄像头的预览与拍照功能,下面就对这些内容逐一加以说明,并完成代码演示。



一、显示预览帧

1、修改AndroidManifest.xml文件:

  • 添加相机的相关权限:

因为在Android中使用SD卡、相机卡等本地硬件资源的时候会涉及授权问题,而且Android的低版本与高版本的授权方式有点不一样。这里首先需要说明一下Android在不同版本上的相机授权差别,Android在低版本中是通过向AndroidManifests.xml中添加文本的方式来完成授权的,添加内容如下:

<!--Allow to use a camera-->
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>

这种方式在Android 6.0以下的版本上使用没有问题,但是在Android 6.0以上的版本中(包括6.0)就会出现问题,原因是Android系统的授权方式改变升级了,所以需要在onCreat中添加如下的代码进行授权:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
   
            requestPermissions( new String[]{
   Manifest.permission.CAMERA}, 203);
        }
  • 设置应用的界面主题为没有顶部标题栏且全屏显示的,在application标签中添加:
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" <!--显示当前的帧率-->
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">  <!--Full screen mode-->
  • 设置横竖屏显示,在application-activity标签中添加:
 android:screenOrientation="landscape"     //屏幕的控制

2、为界面布局文件添加显示相机内容的组件:

打开res/layout下面的activity_main.xml布局文件,往布局中添加一个OpenCV的视觉组件JavaCameraView:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:opencv="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <org.opencv.android.JavaCameraView 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/camera_view"
        opencv:show_fps="true"  
        opencv:camera_id="any"/>
 
</RelativeLayout>

3、在MainActivity中调用API

打开src目录下面的MainActivity,由于我们的目标是在应用中通过OpenCV的Java API实现打开相机全屏显示,并获取预览框,所以MainActivity需要实现CvCameraViewListener2接口,可以实现三个方法,分别是:onCameraViewStarted、onCameraViewStopped和onCameraFrame,关键的图像处理写在onCameraFrame函数中:

在这里插入图片描述
调用API
声明一个JavaCameraView对象,用于存放activity_main.xml中的JavaCameraView组件,并在OnCreate中实现绑定和添加事件监听:

mCVCamera = (JavaCameraView) findViewById(R.id.camera_view);
mCVCamera.setCvCameraViewListener(this);

修改public Mat onCameraFrame(CvCameraViewFrame inputFrame)回调函数的内容了,这个函数在相机刷新每一帧都会调用一次,而且每次的输入参数就是当前相机视图信息,我们直接获取其中的RGBA信息作为Mat数据返回给显示组件即可:

/**
	 * 图像处理都写在此处
	 */
	@Override
	public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
   
		//直接返回输入视频预览图的RGBA数据并存在Mat数据中
		return inputFrame.rgba();
	}
       

以上操作中,我们在OnCreate函数中已经获取到mCVCamera对象,只有调用mCVCamera.enableView()之后,预览组件才会显示每一帧的Mat图像,但是在显示之前我们必须先确保OpenCV的库文件已经加载完成,所以调用此方法需要进行异步处理:

/**
 * 通过OpenCV管理Android服务,异步初始化OpenCV
 */
BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
   
	@Override
	public void onManagerConnected(int status){
   
		switch (status) {
   
		case LoaderCallbackInterface.SUCCESS:
			Log.i(TAG,"OpenCV loaded successfully");
			mCVCamera.enableView();
			break;
		default
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: OpenCV for Android 是一个开源的计算机视觉,它提供了一系列用于计算机视觉应用的高效算法。OpenCV 是一个流行的计算机视觉,它提供了许多用于图像和视频处理的功能。如果你想在 Android 应用程序中使用 OpenCV,你可以使用 OpenCV for Android。 在使用 OpenCV for Android 之前,你需要先安装 Android Studio 和 OpenCV for Android。安装完成后,你可以创建一个新的 Android 应用程序项目,并将 OpenCV for Android 添加到你的项目中。 要使用 OpenCV for Android,你需要在你的代码中添加 OpenCV 的引用。你可以使用 OpenCV 提供的 Java API,或者使用 JNI 将 C++ 代码嵌入到你的应用程序中。 在使用 OpenCV for Android 时,你需要确保你的应用程序具有足够的权限,以便访问设备上的相机或图等资源。你还需要测试你的应用程序,以确保它可以正确地使用 OpenCV 来处理图像和视频数据。 总的来说,OpenCV for Android 是一个强大的工具,可以帮助你快速开发出高质量的 Android 应用程序,从而实现各种计算机视觉任务。 ### 回答2: OpenCV for Android是一个专门设计用于移动平台的图像处理,它给Android系统提供了处理数字图像和视频的丰富功能和工具。OpenCV for Android可以作为一个Android应用中的(.so文件),也可以通过Java API直接调用。它可以完成图像预处理、特征提取、物体检测、视频分析等多种图像处理功能。 OpenCV for Android用C++语言开发,但也提供了Java API,这使得开发者可以使用Java语言调用C++函数,而避免了直接使用NDK编写Native代码的复杂性。它的Java API设计良好,比较容易理解和使用。与此同时,OpenCV for Android提供了一个完整的示例应用程序,方便开发者学习和使用OpenCV for Android还具有高度的可裁剪性。开发者可以根据自己的需求,选择只使用OpenCV for Android中的特定模块,而不必将整个作为一个整体引入项目。这使得OpenCV for Android在应用中的集成更为灵活和轻量。 OpenCV for Android有一些特性,使其在处理大规模的图像和视频上更为高效和可靠。它使用了Java虚拟机 (JVM) 来缓存和管理内存,而OpenCV核心会自动进行并行优化,以使程序在Android设备上运行得更快。此外,OpenCV for Android支持多种图像和视频格式,如JPG、PNG、BMP、AVI、MP4等。 总之,OpenCV for AndroidAndroid平台上提供了强大的图像和视频处理能力,为开发者带来了巨大的方便,并且可以快速集成到Android应用程序中。作为一个开源,它的源代码和详细的文档也是公开可用的,这使得学习和使用OpenCV for Android更为容易和方便。 ### 回答3: OpenCV for Android是一款开源的计算机视觉,它可以轻松地在Android平台上进行图像和视频处理。这个具有广泛的功能,包括图像处理、目标识别、运动跟踪、面部识别和机器学习等等。 OpenCV for Android使用非常简单和直接。可供选择的API包括Java API和C++ API。你可以使用Java API来编写易于理解和易于维护的代码,或者使用C++ API来获得更高的性能和更完整的OpenCV函数OpenCV for Android也提供了丰富的开发工具。开发者可以使用Android Studio来编写和调试他们的OpenCV应用程序。同时,该还提供了大量的示例代码和文档,以帮助开发者更快地开始开发他们的应用程序。 除此之外,OpenCV for Android还可以与其他和工具进行集成,例如TensorFlow,Caffe和Git等。这些工具加强了OpenCV的功能,为开发者提供了更多的选择和灵活性。 总体而言,OpenCV for Android是一种强大而且易于使用的计算机视觉,它适用于广泛的应用程序和项目。它的不断发展和完善也使其成为了学习计算机视觉技术的理想选择。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值