如何在二值图像中将一个包含连接像素的形状拆分为两部分

2024-09-30 01:30:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

下面是测试图像

enter image description here

噪声消除也应用于该二值图像

enter image description here

到目前为止,我遵循了这篇论文。在大多数情况下,我使用自定义函数,而不是使用内置的OpenCV函数,因为我想从头开始。(尽管使用了一些腐蚀、打开和关闭来调整)

我想知道一种从整个面部区域分割颈部并像这样移除的方法

enter image description here

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


Tags: 函数代码py图像区域目标二进制绘制
1条回答
网友
1楼 · 发布于 2024-09-30 01:30:16

执行距离变换(内置在opencv中,或者您可以手动编写,这是一个非常有趣且简单的方法,可以使用腐蚀函数迭代编写,并且每轮将结果添加到另一个矩阵中,lol缓慢但概念上很简单)。在你上面展示的二值图像上,距离变换中的最高值(我认为在任何面部照片中都是如此)将是脸部的中心。因此,该像素是长方体的中心,但该值(距离变换后该像素的值)将为您提供一个非常坚实的近似面大小(因为它将是从面中心到面的水平边的像素距离)。根据您的目标,您可能只需要将该距离乘以1.5左右(计算出标准的面宽与高度比等,以选择最佳乘数),将其设置为圆半径(或长方体的半边宽),然后结束。如果你需要任何澄清的东西,因为我对这个答案非常有信心,如果你需要的话,我很乐意写一些快速代码(C++ + OpenCV)。p>

(另一个想法)。您可以稍微调整颜色过滤器,以拒绝较暗的区域(这将至少在呈现的图像中)由于下巴的阴影,在脸部和颈部之间创建一个良好的分隔。(您可能需要拨回您的扩张/关闭操作)

相关问题 更多 >

    热门问题