今天是2019.8.2,实习第二天,昨天安装好了opencv和demo跑起来了,今天本来是想要自己搭建opencv开发环境的,结果错误很多。导师就让我在demo里面操作修改,于是我先去网上查看opencv的开发文档,来学习一下opencv如何从安卓设备的摄像头,获取图像,图像处理,识别人脸的。
private CameraBridgeViewBase mOpenCvCameraView;
这段代码定义了一个opencv包装好的,camera。
大概思路就是摄像头获取图像,在opencv的sdk里面处理图像,比对人脸,然后框出来
public Mat onCameraFrame(CvCameraViewFrame inputFrame) { mRgba = inputFrame.rgba(); mGray = inputFrame.gray(); if (mAbsoluteFaceSize == 0) { int height = mGray.rows(); if (Math.round(height * mRelativeFaceSize) > 0) { mAbsoluteFaceSize = Math.round(height * mRelativeFaceSize);
        } mNativeDetector.setMinFaceSize(mAbsoluteFaceSize);
    }
    MatOfRect faces = new MatOfRect(); if (mDetectorType == JAVA_DETECTOR) { if (mJavaDetector != null) mJavaDetector.detectMultiScale(mGray, faces, 1.1, 2, 2, // TODO: objdetect.CV_HAAR_SCALE_IMAGE  new Size(mAbsoluteFaceSize, mAbsoluteFaceSize), new Size());
    } else if (mDetectorType == NATIVE_DETECTOR) { if (mNativeDetector != null) mNativeDetector.detect(mGray, faces);
    } else {
        Log.e(TAG, "Detection method is not selected!");
    }
    Rect[] facesArray = faces.toArray(); for (int i = 0; i < facesArray.length; i++)
        Imgproc.rectangle(mRgba, facesArray[i].tl(), facesArray[i].br(), FACE_RECT_COLOR, 3); return mRgba;
}

这段代码包含了,获取图像,识别人脸,展示识别过后的图像的功能。


上图是通过回调展示rgba图片
感受:作为一个新手学会去调用他给的api实现自己的功能是最好的,到后面慢慢成长需要知道原理再去学原理往往能够理解很多。
机器学习提供人脸识别的api
计算机图形学和数字图像处理提供图片的处理api给机器学习程序学习
上面集成为一个jni给安卓程序员去调用。
安卓传入摄像头获得图片。给opencv