Как убрать фон с картинки - PullRequest
0 голосов
/ 02 июля 2018

Мне нужно удалить все на этом изображении, кроме дерева и его листьев. Я ищу предложения о том, как удалить все, что не является частью дерева. Изображение, которое мне нужно обработать, это here.

1 Ответ

0 голосов
/ 03 июля 2018

Этот вопрос широк. Но для данного изображения есть обходной путь. Вы можете сегментировать передний план, преобразовав изображение в другое цветовое пространство.

Обратите внимание, насколько контрастно голубое небо и облака относительно листьев на переднем плане. Применение простого порога к каналу оттенка сегментирует большую часть листьев.

Код:

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, предназначенный для простых изображений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...