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

标签 python image opencv cv2

我想裁剪图像中的对象,以便仅保留彩色对象。如何以最有效的方式在python中执行此操作?

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

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

最佳答案

最后,我找到了可以完成此工作的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

关于python - 如何在opencv-python中的特定背景颜色上裁剪图像中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55495807/

相关文章:

r - 创建 stackoverflow.com 的用户图像模式,identicon

OpenCV parallel_for 不使用多个处理器

android - 找到棋角后旋转图像

python - PySpark - 添加一个按用户排名的新列

php 获取图像属性 "title"

c++ - c++和opencv生成奇怪的图片标题

c++ - opencv linemod抛出运行时错误

python - 如何使用 BeautifulSoup 查找节点的子节点

python - Sed 一个衬里在 python 子进程中不起作用

python - 使用 BatchElements 进行批处理在 DirectRunner 和 DataflowRunner (GCP/Dataflow) 中的工作方式不同