如何使用 Python(可能还有一些工具,如 OpenCV)以编程方式从左边的图像转到右边的图像?
这是我使用在线剪裁工具手工制作的。我在图像处理方面完全是菜鸟(尤其是在实践中)。我正在考虑应用一些边缘或轮廓检测来创建一个蒙版,稍后我将在原始图像上应用它以将其他所有内容(感兴趣区域除外)涂成黑色。但我惨遭失败。
目标是对非常相似的图像数据集进行预处理,以训练 CNN 二元分类器。我试图通过只裁剪靠近感兴趣区域的图像来训练它,但是噪声太高以至于 CNN 完全没有学到任何东西。
有人可以帮我做这个预处理吗?
最佳答案
我使用了 OpenCV 的 watershed 实现算法来解决你的问题。如果您阅读 this great tutorial,您可以了解如何使用它。 , 所以我不会详细解释这一点。
我选择了四个点(标记)。一个位于您要提取的区域,一个在外部,另外两个在您不感兴趣的内部的下部/上部。然后我创建了一个空整数数组(所谓的标记图像)并用零填充它。然后我为标记位置的像素分配了唯一值。
下图显示了在原始图像上绘制的标记位置和标记值:
我也可以在同一区域内选择更多标记(例如,属于您要提取的区域的多个标记),但在这种情况下,它们都应该具有相同的值(在本例中为 255)。
然后我用了分水岭。第一个输入是您提供的图像,第二个输入是标记图像(除了标记位置以外的所有地方都为零)。该算法将结果存储在标记图像中;您感兴趣的区域标有区域标记的值(在本例中为 255):
我将所有不具有 255 值的像素设置为零。我用 3x3 内核将获得的图像放大了三倍。然后我使用扩张后的图像作为原始图像的蒙版(我将蒙版外的所有像素设置为零),这是我得到的结果:
您可能需要某种可以自动找到标记的方法。该任务的难度在很大程度上取决于输入图像集。在某些情况下,该方法可能非常直接和简单(如上面链接的教程中所示),但有时这可能是一个棘手的问题。但我不能推荐任何东西,因为我不知道你的图片一般是什么样子的(你只提供了一张)。 :)
关于python - 在 Python 中以编程方式裁剪图像/删除背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42442279/