Android studio3.6.1+ opencv3.4.1进行摄像头颜色识别的调试过程

本文介绍了使用Android Studio 3.6.1和OpenCV 3.4.1进行摄像头颜色识别的调试过程,包括XML注释操作、Activity名字修改、横竖屏设置,以及颜色识别的步骤。作者将官方示例代码应用于项目中,实现了颜色阈值范围内的轮廓识别,并在中心位置绘制小矩形,而非外接矩形。
摘要由CSDN通过智能技术生成

Android studio3.6.1+ opencv3.4.1进行摄像头颜色识别的调试过程
本文过程建立在成功导入opencv3.4.1library并且成功运行打开摄像头的基础上的。在完成了验证并且使用opencv打开摄像头程序之后,剩下的就是java文件中代码的具体编写了,本人刚刚上手android学习,现在将一些简单的理解与在调试中遇到的困难记录如下,如有不足和错误之处欢迎大家留言交流。
一.一些调试长错误
1.在.xml文件中添加注释,删除注释快捷键
添加注释:选中你要注释的代码->ctrl+shift+/
去掉注释:选中你要去掉注释的代码->ctrl+shift+
2.activity名字的修改,以Main2Activity为例,
如果要修改名字,1.文件名要改2.manifest中注册的名字要改3.Main2Activity中对应的类名也要改–>
3.在进一步 activity_main.xml的名字不必与MainActivity对应,但是一般对应最好,方便查阅,但是调用是在MainActivity中声明的
在这里插入图片描述

4.在AndroidManifest.xml里面可以设置横竖屏的方式
5.一个activity对应一个xml,但是在这个activity中可以调用别的activity
二.在进行颜色识别时的过程
1.在官方的示例代码color-blob-detection中的两个java文件复制粘贴在你的相应位置中,其中我们可以将ColorBlobDetectionActivity.java改名成自己的MainActivity.java,但要注意在上方提到的几个位置进行修改,并于显示界面的文件xml对应上,否则就会报错。ColorBlobDetection.java个人理解就相当于是写好的一个类,我们调用其中的一些功能。
在这里插入图片描述

2.,官方的代码呢,是打开APP之后,先选中一个色块,然后去找到对应颜色的轮廓,并默认用红色的细线进行框出。
而我想实现的功能是:预先设置好颜色的阈值范围,然后识别出自己颜色的轮廓,并使用在其中心位置画出小矩形,而不是官网的一些opencv的教程提到的画出外接矩形,下面将自己的代码贴在下面,上面有自己在学习的工程中记录的一些注释,可能有些地方不太准确,欢迎交流

MainActivity.java

在这里插入代码片
package com.example.testopencvad;

import java.util.List;

import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2;
import org.opencv.imgproc.Imgproc;
import org.opencv.imgproc.Moments;

import android.app.Activity;
import android.graphics.drawable.shapes.OvalShape;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnTouchListener;
import android.view.SurfaceView;

import static org.opencv.imgproc.Imgproc.CONTOURS_MATCH_I1;
import static org.opencv.imgproc.Imgproc.boundingRect;

public class MainActivity extends Activity implements OnTouchListener, CvCameraViewListener2 {
   
    private static final String  TAG              = "colordetect";

    private boolean              mIsColorSelected = false;
    private Mat                  mRgba;//两个mat对象
    private Scalar               mBlobColorRgba;
    private Scalar               mBlobColorHsv;
    private ColorBlobDetector    mDetector;
    private Mat                  mSpectrum;
    private Size                 SPECTRUM_SIZE;
    private Scalar               CONTOUR_COLOR;

    private CameraBridgeViewBase mOpenCvCameraView;//opencv中的抽象类,类似于Android中的SurfaceView该类实现了两个接口:
    // CvCameraViewListener     CvCameraViewListener2这两个接口提供了回调处理,,开始和停止摄像机,,处理每一帧的拍摄
    //要实现CameraBridgeViewBase有两个view,JavaCameraView  NativeCameraView:是C++类,相较而言可以得到较高的帧速率

    //为了画矩形框
    private Mat                  mMat;
    private int     x;
    private int     y;
    private int     w;
    private int     h;
    private Point  mpoint;
    private BaseLoaderCallback  mLoaderCallback = new BaseLoaderCallback(this) {
   
        @Override
        public void onManagerConnected(int status) {
   
            switch (status) {
   
                case LoaderCallbackInterface.SUCCESS:
                {
   
                    Log.i(TAG, "OpenCV loaded successfully");
                    mOpenCvCameraView.enableView();
                    mOpenCvCameraView.setOnTouchListener(MainActivity.this);
                } break;
                default:
                {
   
                    super.onManagerConnected(status);
                } break;
            }
        }
    };

    public MainActivity() {
   
        Log.i(TAG, "Instantiated new " + this.getClass());
    }

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
   
        Log.i(TAG, "called onCreate")
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值