cv2-маскирование изображений с контуром - PullRequest
0 голосов
/ 22 января 2020

Я попытался использовать порог, выпуклый корпус, контур, чтобы сделать маску, но все они не сработали, набор данных, который у меня есть, - набор ракеток, и lo go и картины были более ярких цветов, поэтому при использовании порога бинарное не работает, а canny и contour не улавливают грани, и трудно закрыть, я хочу только маскировать форму ракетки, есть ли лучший способ решить это? спасибо

import cv2
import numpy as np
import random as rng

img =cv2.imread(r"D:\Hu_20200117\20200117160808\51-20200117160823868.bmp",cv2.IMREAD_GRAYSCALE)
img = cv2.medianBlur(img,5)
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(9,9))
dilated = cv2.dilate(img, kernel)
canny = cv2.Canny(dilated, 20, 150)
th3 = cv2.adaptiveThreshold(dilated,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV,11,5)
_,contours, _ = cv2.findContours(th3, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)


hull_list = []
for i in range(len(contours)):
    hull = cv2.convexHull(contours[i])
    hull_list.append(hull)
# Draw contours + hull results
drawing = np.zeros((th3.shape[0], th3.shape[1], 3), dtype=np.uint8)
for i in range(len(contours)):

    # cv2.drawContours(drawing, contours, i, (255,255,255),cv2.FILLED)
    cv2.drawContours(drawing, hull_list, i, (255,255,255),cv2.FILLED)
# Show in a window
foreground = cv2.morphologyEx(drawing, cv2.MORPH_OPEN, kernel)
foreground = cv2.morphologyEx(foreground, cv2.MORPH_CLOSE, kernel)

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
background = cv2.dilate(foreground, kernel, iterations=3)
cv2.imshow('drawing', drawing)
cv2.imshow('Background', background)
cv2.waitKey(0)

enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here

адаптивный порог, кажется, имеет четкий контур, но не был закрыт, не может его заполнить enter image description here

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