使用新图像将位图转换为Mat并将其返回到opencv android中

时间:2016-02-22 17:18:58

标签: android opencv image-processing bitmap face-detection

我在android中使用opencv。我已经为gradle android studio下载了最新的opencv sdk。 我导入了样本进行人脸检测并成功构建了它。它看起来像那样

enter image description here 它在脸部周围绘制绿色矩形。我想获得该矩形内的区域,使用位图将其替换为可绘制文件夹中的新图像。 我现在为实现目标而做的是

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);
        try {

             resultBitmap = BitmapFactory.decodeResource(getResources(),
                     R.drawable.icon);

           Utils.bitmapToMat(resultBitmap, mRgba);
        }
            catch(Exception e){
                Log.e(TAG, "Length of resultBitmap" + resultBitmap.getByteCount());
                resultBitmap.recycle();
                resultBitmap=null;

            }

            return mRgba;
    }

我到目前为止所做的是:我获取Mat对象,使用drawable文件夹中的图像创建位图,再次将该位图转换为Mat对象,然后返回该Mat对象。但不幸的是,这并没有显示任何东西。任何人都可以帮助我,我做错了。任何帮助将非常感激。谢谢:))

0 个答案:

没有答案