以下是我运行以查找面部区域的代码
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 轮廓:垫 [932*1*CV_32SC2,isCont=true,isSubmat=false,nativeObj=0xffffffff96aa78f8,dataAddr=0xffffffff96a57010]
我也尝试将它们全部绘制出来,但是有太多我不想要的额外区域。
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 值。我怎样才能做到这一点?请给我一些帮助。非常感谢。