Удалить фон изображения - PullRequest
3 голосов
/ 17 июня 2020

Я пытаюсь удалить фон изображения (фон может быть любого другого цвета или содержать шум, пыль и т. Д. c)

Это изображение:

enter image description here

А это мой код:

import cv2

img = cv2.imread('image.jpg', 0)

norm_img = np.zeros(img.shape)

normim = cv2.normalize(img, norm_img, 0, 255, cv2.NORM_MINMAX)

_, thresh1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)

kernel = np.ones((5,5),np.uint8)

opening = cv2.morphologyEx(thresh1, cv2.MORPH_OPEN, kernel)

mask_inv = cv2.bitwise_not(opening)

seg = cv2.add(mask_inv, normim)

Вывод:

enter image description here

Код собирается нормализовать исходное изображение, а затем добавить изображение, которое применяет морфологию, которая является двоичным изображением.

Результат нормализации исходного изображения и морфологического применения исходного изображения:

enter image description here enter image description here

Итак, что происходит с моим кодом, как я могу удалить фон?

Ответы [ 2 ]

1 голос
/ 20 июня 2020

Вы можете попробовать использовать процентиль для нормализации.

import cv2
from numpy import percentile
img = cv2.imread('mSEsr.jpg', cv2.IMREAD_GRAYSCALE)
cv2.normalize(img, img, 0, 255, cv2.NORM_MINMAX)
lower=percentile(img, 5)
upper=percentile(img,50)
cv2.normalize(img, img, -lower, 255+255-upper, cv2.NORM_MINMAX) # tune parameters

cv2.imwrite('finger_norm.png', img)

Результат: enter image description here

1 голос
/ 17 июня 2020

Вы можете сделать это, используя Numpy и Python / OpenCV следующим образом:

Ввод:

enter image description here

Маска:

enter image description here

import cv2
import numpy as np

# read image
img = cv2.imread('fingerprint.jpg')

# read mask as grayscale
mask = cv2.imread('mask.jpg', cv2.IMREAD_GRAYSCALE)

# threshold mask
thresh = cv2.threshold(mask, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)[1]

# apply mask to image
result = img.copy()
result[thresh==0] = (255,255,255)

# save results
cv2.imwrite('fingerprint_masked.jpg', result)

cv2.imshow('masked image', result)
cv2.waitKey(0)
cv2.destroyAllWindows()


Результат:

enter image description here

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