Как размыть / растушевать края объекта на изображении с помощью Opencv? - PullRequest
1 голос
/ 08 марта 2019

Цель - размыть края выделенного объекта на изображении.

Я выполнил шаги для получения контуров объекта, используя следующий код:

image = cv2.imread('path of image')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 60, 255, cv2.THRESH_BINARY)[1]
im, contours, hierarchy = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

Я также могу построить контур, используя:

cv2.drawContours(image, contours, -1, (0, 255, 0), 2)

Теперь я хочу использовать точки, хранящиеся в contours, для размытия / растушевки края объекта, возможно, используя размытие по Гауссу. Как мне этого добиться?

Большое спасибо!

1 Ответ

3 голосов
/ 08 марта 2019

Подобно тому, что я упомянул здесь , вы можете сделать это в следующие шаги:

  • Загрузить исходное изображение и найти контуры.
  • Размытьисходное изображение и сохраните его в другой переменной.
  • Создайте пустую маску и нарисуйте на ней обнаруженные контуры.
  • Используйте метод np.where (), чтобы выбрать пиксели из маски (контуры)), где вы хотите размытые значения, а затем заменить его.

import cv2
import numpy as np

image = cv2.imread('./asdf.jpg')
blurred_img = cv2.GaussianBlur(image, (21, 21), 0)
mask = np.zeros(image.shape, np.uint8)

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 60, 255, cv2.THRESH_BINARY)[2]
contours, hierarchy = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

cv2.drawContours(mask, contours, -1, (255,255,255),5)
output = np.where(mask==np.array([255, 255, 255]), blurred_img, image)

Original image

Detected contours

Blurred edges

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