Java 为什么我能';在我的android项目中,是否使用阈值opencv进行皮肤分割验证?
我正在做关于使用android和opencv实时识别手势的最后一个项目。我正在对它进行皮肤分割,通过将图片从相机帧(RGB)转换为YCrCb颜色,并从指向皮肤颜色的矩形中获得Cr和Cb值(范围)(类似于颜色选择器)。现在,我想通过android手机上的选项菜单按钮使用阈值功能来证明这一点(皮肤分割)。但是,这不是工作,没有效果。我该怎么办?这是我的阈值代码:Java 为什么我能';在我的android项目中,是否使用阈值opencv进行皮肤分割验证?,java,android,opencv,skin,threshold,Java,Android,Opencv,Skin,Threshold,我正在做关于使用android和opencv实时识别手势的最后一个项目。我正在对它进行皮肤分割,通过将图片从相机帧(RGB)转换为YCrCb颜色,并从指向皮肤颜色的矩形中获得Cr和Cb值(范围)(类似于颜色选择器)。现在,我想通过android手机上的选项菜单按钮使用阈值功能来证明这一点(皮肤分割)。但是,这不是工作,没有效果。我该怎么办?这是我的阈值代码: case MainActivity.VIEW_MODE_THRES: mask = rgba.clone(); r
case MainActivity.VIEW_MODE_THRES:
mask = rgba.clone();
rgbaInnerWindow = rgba.submat(top, top + height, left, left + width);
Imgproc.cvtColor(rgbaInnerWindow, rgbaInnerWindow, Imgproc.COLOR_BGR2YCrCb);
Imgproc.cvtColor(mask, mask, Imgproc.COLOR_BGR2GRAY);
Core.inRange(rgbaInnerWindow, new Scalar(0, Cr_low, Cb_low), new Scalar (255, Cr_high, Cb_high), mask);
image = mask.clone(); //save the image segmentation output
Imgproc.blur(mask, mask, new Size(5,5));
Imgproc.threshold(mask, mask, 13, 255, Imgproc.THRESH_OTSU);
Core.inRange(mask, new Scalar(30), new Scalar(255), mask);
rgbaInnerWindow.release();
mask.release();
break;
我认为您的treshold方法没有正确指定
Imgproc.threshold(mask, mask, 13, 255, Imgproc.THRESH_OTSU);
来自文档
此外,特殊值THRESH_OTSU可与上述值之一组合
我认为您可能需要尝试:
Imgproc.threshold(mask, mask, 13, 255, Imgproc.THRESH_OTSU | Imgproc.THRESH_BINARY);
例如您的意思是按下菜单按钮无效,或者阈值设置没有发生?@GáborBakos阈值设置没有工作。你能帮我吗?给我们看阈值化前后的
遮罩
图像。遮罩图像是从rgba图像(相机的图像输入帧)克隆出来的,然后我将其转换为灰度图像。这样做对吗?掩码实际上是inRange
函数输出的目标。它需要是CV_8U
并且与inRange()
的输入大小相同,即与rgbainerWindow
的大小相同。通过使用克隆,您正在做额外的工作(复制源数据),并使掩码
大于您在范围上执行的区域。它比源图像大这一事实可能是个问题。难道你不能将掩码分配为一个大小合适的新CV_8U矩阵吗?