【发布时间】:2015-05-07 08:41:07
【问题描述】:
我正在使用 android 和 opencv 进行实时手势识别的最终项目。我正在对其进行皮肤分割,方法是将图片从相机帧(RGB)转换为 YCrCb 颜色,并从指向皮肤颜色的矩形中获取 Cr 和 Cb 值(范围)(看起来像颜色选择器)。现在,我想通过我的安卓手机上的选项菜单按钮使用阈值功能来证明它(皮肤分割)。但是,它不起作用,没有效果。我该怎么办 ?这是我的阈值代码:
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;
【问题讨论】:
-
你的意思是按下菜单按钮没有效果,或者阈值没有发生?
-
@GáborBakos 阈值不起作用。你能帮帮我吗?
-
向我们展示阈值处理前后的
mask图像。 -
掩码图像是从rgba图像(来自相机的图像输入帧)克隆的,然后我将其转换为灰度图像。这样做对吗?
-
掩码实际上是
inRange函数输出的目的地。它必须是CV_8U并且与inRange( )的输入大小相同,即与rgbaInnerWindow的大小相同。通过使用克隆,您正在做额外的工作(复制源数据)并使mask大于您正在执行inRange的区域。它比源图像大的事实可能是一个问题。您不能将mask分配为适当大小的新CV_8U 矩阵吗?
标签: java android opencv skin threshold