我如何将具有选定像素的形状分成二进制图像中的两部分

问题描述 投票:3回答:1

我的目标是通过删除连接到整个脸部区域的颈部区域在脸部周围绘制矩形边框。此处所有正值均代表肤色像素。到目前为止,这里我已经使用OpenCV和python过滤掉了二进制图像。到目前为止的代码skinid.py

下面是测试图像。

enter image description here

去噪也已应用于此二进制图像

enter image description here

至此,我关注了本文Face segmentation using skin-color map in videophone applications。在大多数情况下,我使用自定义函数而不是使用内置的OpenCV函数,因为我有点想从头开始。 (尽管使用了一些侵蚀,打开,关闭来进行调整)

我想知道一种从整个面部区域将脖子分开并像这样去除它的方法,

enter image description here

因为我对整个图像处理领域还很陌生。

python opencv image-processing computer-vision feature-detection
1个回答
0
投票

执行距离转换(内置在opencv中,或者您可以手工编写它非常有趣且易于迭代,使用erode函数编写,并将结果每轮添加到另一个矩阵中,大声慢,但从概念上讲很简单)。在上面显示的二进制图像上,距离变换(和tbh,我认为在任何杯子射击中都可以很概括)的最高值将是脸部的中心。因此该像素是框的中心,但该值(距离变换后该像素的值)也将为您提供相当稳定的近似脸部尺寸(因为它将是从脸部中心到脸部的水平边缘)。根据您所追求的目标,您也许可以将该距离乘以1.5左右(找出标准的脸部宽度与高度之比,并选择最佳的乘数),然后将其设置为圆半径(或半边宽) (一个盒子),然后称之为一天。如果您需要澄清任何内容,请发表评论,因为我对此答案非常有信心,并且如果您需要/会有所帮助,很乐意编写一些快速代码(在c ++ opencv中)。

(替代主意)。您可以稍微调整滤色器以拒绝较暗的区域(这将至少在显示的图像中>>)由于下巴的阴影而在您的脸部和颈部之间形成了很好的分离。 (您可能需要拨回您的扩张/结束时间)

© www.soinside.com 2019 - 2024. All rights reserved.