将背景和前景分开

MAS*_*MAS -3 python image-processing image-segmentation scikit-learn

我有一个图像:python中分离背景和前景的最佳方法是什么?

在此输入图像描述

Ima*_*ngo 8

如果您想要的是估计对象的位置,您可以使用图像的颜色来获得想法.所有下面的步骤都是使用scikit-image完成的.这些操作非常基本,是Lab色彩空间中的简单阈值处理(最基本的图像处理工具).如果您想要在没有用户交互的情况下更复杂的事情,则需要更多的努力.

0)导入包

import numpy as np
from skimage import io, color
Run Code Online (Sandbox Code Playgroud)

1)加载图像

rgb = io.imread('your_image_path')
Run Code Online (Sandbox Code Playgroud)

2)将图像转换为Lab颜色空间.对于大多数应用,Lab色彩空间通常提供更好的色彩分离性.

img = color.rgb2lab(rgb)
Run Code Online (Sandbox Code Playgroud)

3)阈值Lab颜色空间

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

上面的线基本上使图像阈值并且将第一通道(L)中的所有像素设置为1,并且在第二和第三通道(a,b)中,将打破任何这些条件的像素设置为0.>40>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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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