Получить область контура цвета кожи в Android с помощью OpenCV

Ниже приведен код, который я запускаю, чтобы найти область лица

 private void detectRegion() {

    //get the image from gallery and change it into bitmap
    Bitmap bmpTemp = originalImg.copy(Bitmap.Config.ARGB_8888, true);
    Utils.bitmapToMat(bmpTemp, mRgbMat);
    Imgproc.cvtColor(mRgbMat, mHsvMat, Imgproc.COLOR_RGB2HSV, channelCount);

    Scalar lowerThreshold = new Scalar(0, 0.23 * 255, 50); // Blue color – lower hsv values
    Scalar upperThreshold = new Scalar(50, 0.68 * 255, 255); // Blue color – higher hsv values
    Core.inRange(mHsvMat, lowerThreshold, upperThreshold, mMaskMat);
    Imgproc.dilate(mMaskMat, mDilatedMat, new Mat());

    Imgproc.findContours(mMaskMat, contours, hierarchy, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);

    Imgproc.drawContours(mRgbMat, contours,counter, colorGreen, iLineThickness);
    Log.d(TAG + " contours " , contours.get(counter).toString());

    // convert to bitmap:
    Bitmap bm = Bitmap.createBitmap(mHsvMat.cols(), mHsvMat.rows(), Bitmap.Config.ARGB_8888);
    Utils.matToBitmap(mRgbMat, bm);

    // find the imageview and draw it!
    imageView.setImageBitmap(bm);
}

Однако я получаю так много регионов, которые мне не нужны. Это мой желаемый регион (зеленый), который я нахожу вручную. Я добавляю значение, когда нажимаю кнопку, и рисую другой регион, когда нажимаю кнопку.

введите описание изображения здесь

это сообщение шоу в logcat.

02-16 00: 11: 46.413 14234-14234 / fyp.hkust.facet D / ColorizeFaceActivity контуры: Mat [ 932*1*CV_32SC2, isCont=true, isSubmat=false, nativeObj=0xffffffff96aa78f8, dataAddr=0xffffffff96a5701]

Я также пытался нарисовать их все, но есть так много дополнительных областей, которые я не хочу.

    for (int contourIdx = 0; contourIdx < contours.size(); contourIdx++) {
        if (contours.size() > 100)  // Minimum size allowed for consideration
        {
            Imgproc.drawContours(mRgbMat, contours, contourIdx, colorGreen, iLineThickness);
            Log.d(TAG + " contours " , contours.get(contourIdx).toString());
        }
    }

Это весь результат введите описание изображения здесь

Как я могу классифицировать их, чтобы получить область лица, а также мне нужно извлечь значение hsv в этой области. Как я могу это сделать? Пожалуйста, помогите мне. Большое спасибо.

0 ответов

Другие вопросы по тегам