如何从图像中删除背景

时间:2018-07-02 20:30:18

标签: python opencv image-processing

我需要删除此图像中除树及其叶子以外的所有内容。 我正在寻找有关如何删除不属于树的所有内容的建议。我需要处理的图像是here.

1 个答案:

答案 0 :(得分:0)

这个问题很广泛。但是对于您提供的图像,有一种解决方法。您可以通过将图像转换为其他颜色空间来分割前景。

请注意,蓝天和云彩与前景中的树叶形成鲜明对比。在色调通道上应用简单的阈值将分割大部分叶子。

代码:

import numpy as np
import cv2

im = cv2.imread('C:/Users/Jackson/Desktop/leaves.jpg', 1)
im = cv2.resize(im, (0, 0), fx = 0.5, fy = 0.5)   

imhsv = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)
cv2.imshow('Hue', imhsv[:,:,0])

enter image description here

#--- Otsu threshold ---
ret, thresh = cv2.threshold(imhsv[:,:,0], 0, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
cv2.imshow('thresh',thresh)

enter image description here

#--- Masking with the original image ---
fin = cv2.bitwise_and(im, im, mask = thresh)
cv2.imshow('fin', fin)

enter image description here

注意:

这不是一般的解决方案。这专用于此图像和具有对比色的图像。对于更通用的方法,您可以尝试GrabCut算法,该算法适用于简单图像。