使用 OpenCV 和 Python 将图像的分割部分替换为其他图像

Using OpenCV and Python to replace a segmented part of an image with other images

我想用另一张图片替换一张图片的一部分。我能够将图像分割成各自的 class,例如,在图像链接中,鹰的图片已使用纯色分割以区分对象和背景。

Original Photo
Segmented Photo

是否有合适的算法可供我试验,按颜色检测对象并执行对象替换?例如,我想用另一种类型的鸟替换这只鹰(有什么办法可以调整新图像的大小以适合图像的当前分割部分?)。

我对这个概念还很陌生,所以非常感谢任何反馈!我绝不是在寻求解决方案,我只是在寻找一个起点(算法、示例代码、教程等)供我进一步探索。非常感谢。

pyimagesearch 是一个很好的博客,可以了解许多图像处理技术。 以下是一些可能有帮助的链接的集合。

To detect objects by colour

To get a good understanding on background and foreground in an image, and working of face detection in opencv

Very good background subtraction library

Stitching the images, you will find this useful for image replacement

您可以使用这个 deeplab v3 模型,该模型在数千张图像上进行训练,可以正确分割任何常见对象(在您的例子中是鸟类)。这将为您提供蒙版图像。

现在,如果您尝试仅裁剪前景并将其覆盖在任何其他背景上,只需使用 opencv's seamless clone 即可轻松实现。这使得替换看起来很自然。

但是,如果您只想裁剪背景并将其替换为另一只鸟,我认为这可能有点棘手。因为你需要先把这只鸟移走,用可能的背景替换它,然后再放置另一只鸟。

希望你能从这里开始你的旅程,并一路进步。