【问题标题】:How to remove background from image如何从图像中删除背景
【发布时间】:2018-07-02 20:30:18
【问题描述】:

我需要删除这张图片中的所有东西,除了树和它的叶子。 我正在寻找有关如何删除不属于树的所有内容的建议。我需要处理的图片是

【问题讨论】:

  • 正如其他人所说,您是否研究过 OpenCV?OpenCV 有一个 Python API,可用于图像处理。这是一个描述如何使用 OpenCv 进行图像分割的链接。 docs.opencv.org/3.4/d3/db4/tutorial_py_watershed.html
  • 这是一个难题。我不羡慕你。但这也不是一个适合 SO 的问题,这不是一个代码编写服务。请阅读以下链接中的文档:help centerhelp centerHow to Ask
  • 我真的不知道从哪里开始,所以我正在寻找建议。以后会问更好的q。

标签: python opencv image-processing


【解决方案1】:

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

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

代码:

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])

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

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

注意:

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

【讨论】: