Android studio3.4.1基于OpenCV库(4.1.0)中的demo打开手机摄像头

Android studio联合OpenCV打开摄像头有许多博客可供参考,我自己也看了许多篇,或许本人笨拙,迟迟没成功,于是决定有朝一日我成功了,一定要记录下来。下面转载两篇我自己看后做成功的链接:[使用OpenCV库中的demo]
(https://www.jianshu.com/p/c74c64cda4ad)
[因为我的手机安卓版本是7.0,需要添加动态权限,假如大家的版本号低于6.0就无需添加,只用添加相机权限即可]
(https://www.jianshu.com/p/2fe4fb3e8ce0)

首先,参考第一个链接,创建工程

Android studio3.4.1基于OpenCV库(4.1.0)中的demo打开手机摄像头_第1张图片
我改了三个地方,第一个为包名;第二个是编程语言(之前我就没改,一直用Kotlin语言);第三个是选择本身手机版本号(Android7.0)。
下面导入OpenCVAndroid studio3.4.1基于OpenCV库(4.1.0)中的demo打开手机摄像头_第2张图片
上图的对话框怎么弹出就不详说了,下面的对话框也是这样(若大家查多资料就懂这个道理了)。我见许多博客在选路径时都是在java下,我自己试过,发现后面添加依赖时没有,于是我将路径选择在sdk下,然后就可以了(或许大家下载的OpenCV库不一样吧!),最后点击Finish即可。
接着将app和opencv中的build.gradle版本号修改一致,即下图所示标注的29、24、29。随后添加so库文件,即在自己下载OpenCV库的路径D:\AndroidStudio\OpenCV\OpenCV-android-sdk\sdk\native\libs下新建文件夹jniLibs,将下图所标注的拷贝到该新建jniLibs中,最后把jniLibs文件拷贝到下图所标注中。
Android studio3.4.1基于OpenCV库(4.1.0)中的demo打开手机摄像头_第3张图片
Android studio3.4.1基于OpenCV库(4.1.0)中的demo打开手机摄像头_第4张图片
Android studio3.4.1基于OpenCV库(4.1.0)中的demo打开手机摄像头_第5张图片

然后添加OpenCV的依赖关系

Android studio3.4.1基于OpenCV库(4.1.0)中的demo打开手机摄像头_第6张图片
选中上图地方,点击“+”号,这里选择第三个即可出现之前添加的opencv,选中并应用。在这里插入图片描述
Android studio3.4.1基于OpenCV库(4.1.0)中的demo打开手机摄像头_第7张图片
添加OpenCV库中的demo,思路:把demo与自己建的工程重合。

  1. 找到自己下载的OpenCV库,进入如下路径D:\AndroidStudio\OpenCV\OpenCV-android-sdk\samples\image-manipulations\src\org\opencv\samples\imagemanipulations
    将其路径下的ImageManipulationsActivity.java文件拷贝到自己安卓项目D:\ASbook\openCV\DemoCamare\app\src\main\java\scr\democamare下,

因为demo的包名在这里插入图片描述与MainActivity.java文件的包名在这里插入图片描述不一致,先把demo的包名修改成MainActivity.java文件的包名,然后可以直接删MainActivity.java文件了。然后将下图位置的MainActivity改为ImageManipulationsActivity。Android studio3.4.1基于OpenCV库(4.1.0)中的demo打开手机摄像头_第8张图片
接下来拷贝链接一的操作:将OpenCV-android-sdk\samples\image-manipulations\res中的三个文件(如下图所示),拷贝到你的安卓项目DemoCamare\app\src\main\res下(与目录下的同名的三个文件合并)
Android studio3.4.1基于OpenCV库(4.1.0)中的demo打开手机摄像头_第9张图片
将OpenCV-android-sdk\samples\image-manipulations中的
AndroidManifest.xml文件,拷贝到你的安卓项目DemoCamare\app\src\main下替换

在图在这里插入图片描述中找到**android:theme=**的代码,修改为android:theme="@android:style/Theme.Holo.Light.DarkActionBar",继续修改第三行的package的包名为scr.democamare。接着添加版本号Android studio3.4.1基于OpenCV库(4.1.0)中的demo打开手机摄像头_第10张图片

最后参考第二个链接内容,添加动态权限

在AndroidManifest.xml中添加所需权限,即在  
android:configChanges="keyboardHidden|orientation"
    android:screenOrientation="landscape"     //屏幕的控制

       //开启摄像头权限
    

随后在ImageManipulationsActivity.java文件中添加如下代码:

//检查动态权限
    private void requestPermission() {

        Log.i(TAG,"requestPermission");
        // Here, thisActivity is the current activity
        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.READ_CONTACTS)
                != PackageManager.PERMISSION_GRANTED) {
            Log.i(TAG,"checkSelfPermission");
            // Should we show an explanation?
            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.READ_CONTACTS)) {
                Log.i(TAG,"shouldShowRequestPermissionRationale");
                // Show an expanation to the user *asynchronously* -- don't block
                // this thread waiting for the user's response! After the user
                // sees the explanation, try again to request the permission.

                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.READ_CONTACTS},
                        MY_PERMISSIONS_REQUEST_READ_CONTACTS);

            } else {
                Log.i(TAG,"requestPermissions");
                // No explanation needed, we can request the permission.
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.READ_CONTACTS},
                        MY_PERMISSIONS_REQUEST_READ_CONTACTS);
                // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
                // app-defined int constant. The callback method gets the
                // result of the request.
            }
        }
    }

    //做出权限响应
    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) {
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Log.i(TAG,"onRequestPermissionsResult granted");
                    // permission was granted, yay! Do the
                    // contacts-related task you need to do.

                } else {
                    Log.i(TAG,"onRequestPermissionsResult denied");
                    // permission denied, boo! Disable the
                    // functionality that depends on this permission.
                    showWaringDialog();
                }
                return;
            }

            // other 'case' lines to check for other
            // permissions this app might request
        }
    }

    private void showWaringDialog() {
        AlertDialog dialog = new AlertDialog.Builder(this)
                .setTitle("警告!")
                .setMessage("请前往设置->应用->PermissionDemo->权限中打开相关权限,否则功能无法正常运行!")
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // 一般情况下如果用户不授权的话,功能是无法运行的,做退出处理
                        finish();
                    }
                }).show();
    }

至此代码编写完成。若程序里有错,一般只需Alt+Enter就能解决。因为这个还是需要下载APK的,所以有些麻烦,往后写一篇不用下载APk的记录吧!

手机下载好APK后,还需去应用权限里打开相机权限,不然会出错(无法支持设备的错误)Android studio3.4.1基于OpenCV库(4.1.0)中的demo打开手机摄像头_第11张图片
打开相机权限:Android studio3.4.1基于OpenCV库(4.1.0)中的demo打开手机摄像头_第12张图片
祝大家顺利!!!

你可能感兴趣的:(毕设过程,Android,studio联合OpenCV)