Удалите маленькие края с картинки в python с помощью Opencv - PullRequest
0 голосов
/ 17 мая 2018

Я новичок в OpenCv. Я пытаюсь создать черно-белое изображение человека через OpenCV в python. Я довольно успешен в создании черно-белой мультяшной картины человека. Но проблема в том, что я хочу удалить черные маленькие точки из выходного изображения. Пожалуйста, помогите мне. Я хочу удалить эти черные точки, как указано на картинке. Вот мой код.

    image = cv2.imread('input1.jpg')
    img_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    img_gray = cv2.medianBlur(img_gray, 5)
    edges = cv2.Laplacian(img_gray, cv2.CV_8U, ksize=5)
    ret,mask =cv2.threshold(edges,100,255,cv2.THRESH_BINARY_INV)
    image2 = cv2.bitwise_and(image, image, mask=mask)
    cv2.imshow("Mask", mask)

enter image description here

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Вы также можете попытаться найти маленькие графы и нарисовать их.Примерно так:

img = cv2.imread('input1.jpg')
imgray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,220,255,0)
_, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
number_contours = len(contours)
print(number_contours)
for i in range(0, number_contours):
    lenght = cv2.contourArea(contours[i])
    if float(1)<lenght<float(5000):
        cv2.drawContours(img, contours[i], 0, (255,255,255), 7)
cv2.imshow("image", img)
cv2.imwrite("brez_pikic.jpg", img)

enter image description here

0 голосов
/ 17 мая 2018

Вам необходимо применить фильтр к вашему изображению, используя OpenCV, чтобы удалить черные точки (которые называются «шум»).Есть много 2D сверток, которые вы можете применить к изображению.

Медианный фильтр

Этот фильтр найдет медианное значение каждого пикселя и окружающих его пикселей.Он может собирать столько пикселей от центра, сколько вам нужно, чтобы усилить эффект.

Размытие по Гауссу

Вы можете применить другой тип размытия, который должен удалить шум, возможно,не совсем, но это, безусловно, уменьшит его эффект.Если вы работаете над черным и белым, что кажется вам, то это на самом деле может полностью удалить шум.

Редактировать

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

image = cv2.imread('input1.jpg')
img_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
img_gray = cv2.medianBlur(img_gray, 5)
edges = cv2.Laplacian(img_gray, cv2.CV_8U, ksize=5)
ret,mask =cv2.threshold(edges,100,255,cv2.THRESH_BINARY_INV)
image2 = cv2.bitwise_and(image, image, mask=mask)
image2 = cv2.medianBlur(image2, 3)  # this
cv2.imshow("Mask", mask)

Надеюсь, этопомогает!

...