Я новичок в компьютерном видении. Я делаю детектор кожи на Android, основанный на http://www.pyimagesearch.com/2014/08/18/skin-detection-step-step-example-using-python-opencv/Какое цветовое пространство для датчика HSV Skin OpenCV android?
Но у меня возникла проблема в выборе цветового пространства. http://imgur.com/DxNOXd9 (Sr, я не могу отправить изображение без 10 репутаций)
Я пробовал много мест в Интернете и на этом сайте, но это неправильно.
Это мой код:
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
Mat hsv = new Mat();
//H,S,V area
Scalar lower = new Scalar(0, 0.28*255, 0);
Scalar upper = new Scalar(25, 0.68*255, 255);
//Skin detector HSV-based
Imgproc.cvtColor(inputFrame.rgba(), hsv, Imgproc.COLOR_RGBA2RGB);
Imgproc.cvtColor(hsv, hsv, Imgproc.COLOR_RGB2HSV_FULL);
Mat result = new Mat(hsv.rows(), hsv.cols(), CvType.CV_8U);
Core.inRange(hsv, lower, upper, result);
// Perform and decrease noise
Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_ELLIPSE, new Size(2, 2));
Imgproc.erode(result, result, kernel);
Imgproc.dilate(result, result, kernel);
Imgproc.GaussianBlur(result, result, new Size(3,3), 0);
// Output
Imgproc.cvtColor(result, result, Imgproc.COLOR_GRAY2RGB);
Imgproc.cvtColor(result, result, Imgproc.COLOR_RGB2RGBA);
return result;
}
Update 1: Я стараюсь, чтобы получить пространство с кожей, например обнаружения лица:
for (int i = 0; i < facesArray.length; i++) {
Core.rectangle(mRgba, facesArray[i].tl(), facesArray[i].br(),
FACE_RECT_COLOR, 3);
Mat hsv = new Mat(inputFrame.rgba(), facesArray[i]);
Imgproc.cvtColor(hsv, hsv, Imgproc.COLOR_RGB2HSV_FULL);
List<Mat> hsv_channel = new ArrayList<Mat>();
Core.split(hsv, hsv_channel);
Log.w("Color: ", "H: " + hsv_channel.get(0) + "S: " + hsv_channel.get(1) + "V: " + hsv_channel.get(2));
}
И вывод:
H: Mat [261 * 261 * CV_8UC1, isCont = true, isSubmat = false, nativeObj = 0xffffffffb8b15658, dataAddr = 0xffffffffb983d5f0]
S: Mat [261 * 261 * CV_8UC1, isCont = true, isS ubmat = ложь, nativeObj = 0xffffffffb8b15698, dataAddr = 0xffffffffb984e030]
V: Mat [261 * 261 * CV_8UC1, isCont = истина, isSubmat = ложь, nativeObj = 0xffffffffb8b156d8, dataAddr = 0xffffffffb985ea60]
Как я могу применить эти к моему коду?
не уверен, андроид, но, как правило OpenCV изображения Арент RGB, но BGR так что, возможно попробовать преобразование BGRA2RGB до RGB2HSV – Micka
@Micka: в Adnroid использования RGBA – tanbaobu
затем образец выглядит нормально ... В чем разница между '' COLOR_RGB2HSV' и COLOR_RGB2HSV_FULL '? Возможно, попробуйте без эрозии, расширения и гаусса в первых попытках. И, возможно, попробуйте более широкий диапазон в начале, например «Скаляр ниже = новый Scalar (0, 0, 0); Scalar upper = new Scalar (25, 255, 255); ' – Micka