分离背景和前景
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
,并且您将拥有对象的边界框。
我有这样一张图片: 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
,并且您将拥有对象的边界框。