如何在opencv-python中的特定背景颜色上裁剪图像中的对象?

问题描述 投票:0回答:1

我想裁剪到我的图像中的对象,以便只保留彩色对象。我怎么能以最有效的方式在python中做到这一点?

基本上,图像具有黑色(0,0,0)背景,但对象具有不同的颜色。我想裁剪到对象以放弃无用的背景。

我知道cv2有resize()函数但是它们无法检测它是否是背景。我也可以循环整个图像来找到位置,但这太慢了。

python image opencv cv2
1个回答
0
投票

最后,我找到了一个API来完成这项工作。

使用cv2.findContours()从掩模图像(具有相应颜色的对象)获取对象的位置,并直接用numpy剪切它。

def cut_object(rgb_image,mask_image,object_color):
"""This function is used to cut a specific object from the pair RGB/mask image."""
rgb_image=cv2.imread(rgb_image)
mask_image=cv2.imread(mask_image)
mask_image=cv2.cvtColor(mask_image,cv2.COLOR_BGR2RGB)

# Create mask image with the only object
object_mask_binary=cv2.inRange(mask_image,object_color,object_color)
object_mask=cv2.bitwise_and(mask_image,mask_image,mask=object_mask_binary)

# Detect the position of the object
object_contour=cv2.cvtColor(object_mask,cv2.COLOR_BGR2GRAY)
object_position,c=cv2.findContours(object_contour,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
object_position=np.array(object_position).squeeze()
hmin,hmax=object_position[:,:1].min(),object_position[:,:1].max()
wmin,wmax=object_position[:,1:2].min(),object_position[:,1:2].max()

# Cut the object from the RGB image
crop_rgb=rgb_image[wmin:wmax,hmin:hmax]

return crop_rgb
© www.soinside.com 2019 - 2024. All rights reserved.