分离背景和前景

separate the background and foreground

我有这样一张图片: python 分离背景和前景的最佳方法是什么?

如果您想要估计物体的位置,可以使用图像的 颜色 来了解一下。以下所有步骤均使用 scikit-image 完成。这些操作非常基本,是 Lab 色彩空间中的简单阈值处理(最基本的图像处理工具)。如果您想要没有用户交互的更复杂的东西,则需要付出更多的努力。

0) 导入包

import numpy as np
from skimage import io, color

1) 加载图片

rgb = io.imread('your_image_path')

2) 将图像变换为Lab colorspace。 Lab 色彩空间通常为大多数应用程序提供更好的颜色分离性。

img = color.rgb2lab(rgb)

3) Lab 色彩空间的阈值

thresholded = np.logical_and(*[img[..., i] > t for i, t in enumerate([40, 0, 0])])

上面的行基本上对图像进行了阈值处理,并将第一个通道中 >40 的所有像素设置为 1 (L), 以及第二和第三通道中的 >0 (a, b), 将打破任何这些条件的像素设置为 0.

4) 显示结果:

from matplotlib import pyplot as plt
fig, ax = plt.subplots(ncols=2)
ax[0].imshow(rgb);         ax[0].axis('off')
ax[1].imshow(thresholded); ax[1].axis('off')
plt.show()

如上所述,这是一个非常快(不太好)的结果,但应该足以让您获得边界框。然后,您可以从 thresholded 图像中提取 ymin, ymax, xmin, xmax,并且您将拥有对象的边界框。