【问题标题】:Clipping image/remove background programmatically in Python在 Python 中以编程方式剪切图像/删除背景
【发布时间】:2017-02-24 15:23:57
【问题描述】:

如何使用 Python(可能还有一些工具,如 OpenCV)以编程方式从左侧图像转到右侧图像?

我使用在线剪辑工具手工制作了这个。我在图像处理方面完全是菜鸟(尤其是在实践中)。我正在考虑应用一些边缘或轮廓检测来创建一个蒙版,稍后我将在原始图像上应用它以将其他所有内容(感兴趣的区域除外)涂成黑色。但我失败得很惨。

目标是预处理非常相似的图像数据集,以训练 CNN 二元分类器。我试图通过只裁剪靠近感兴趣区域的图像来训练它,但噪音太高以至于 CNN 完全没有学到任何东西。

有人可以帮我做这个预处理吗?

【问题讨论】:

    标签: python opencv image-processing conv-neural-network


    【解决方案1】:

    我使用 OpenCV 的 watershed 算法实现来解决您的问题。看this great tutorial就知道怎么用了,我就不详细解释了。

    我选择了四个点(标记)。一个位于您要提取的区域,一个位于外部,另外两个位于您不感兴趣的内部下部/上部。然后我创建了一个空整数数组(所谓的标记图像)并用零填充它。然后我为标记位置的像素分配了唯一值。

    下图显示了标记位置和标记值,绘制在原始图像上:

    我还可以在同一区域内选择更多标记(例如,属于您要提取的区域的多个标记),但在这种情况下,它们都应该具有相同的值(在本例中为 255)。

    然后我使用了分水岭。第一个输入是您提供的图像,第二个输入是标记图像(除标记位置外,所有位置均为零)。该算法将结果存储在标记图像中;您感兴趣的区域用区域标记的值标记(在本例中为 255):

    我将所有没有 255 值的像素设置为零。我用 3x3 内核将获得的图像放大了 3 次。然后我使用膨胀图像作为原始图像的掩码(我将掩码外的所有像素设置为零),这就是我得到的结果:

    您可能需要某种自动查找标记的方法。这项任务的难度在很大程度上取决于输入图像的集合。在某些情况下,该方法可能非常简单明了(如上面链接的教程中所示),但有时这可能是一个难以破解的难题。但我不能推荐任何东西,因为我不知道你的图像一般看起来如何(你只提供了一个)。 :)

    【讨论】:

    • 看起来很有希望。所有的图像都非常相似,所以我可以用整个数据集的平均值或/和标准 dev 制作一个掩码。今天或明天我会努力做到这一点,我会告诉你进展如何。干得好,谢谢!
    猜你喜欢
    • 2010-10-03
    • 2016-04-25
    • 2022-11-17
    • 2014-04-18
    • 2023-03-05
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多