Как убрать блики с изображений в opencv? - PullRequest
0 голосов
/ 09 апреля 2020

Этот код Mathematica удаляет блики с изображения:

img = Import["foo.png"]
Inpaint[img, Dilation[saturated, DiskMatrix[20]]]

, как показано в наиболее часто задаваемом ответе:

https://dsp.stackexchange.com/questions/1215/how-to-remove-a-glare-clipped-brightness-from-an-image

Я хочу использовать opencv вместо Mathematica, чтобы получить тот же результат. Как бы я написал эквивалентный код в opencv- python?

1 Ответ

0 голосов
/ 09 апреля 2020

Вот как это сделать в Python / OpenCV.

Но я не думаю, что процедуры рисования OpenCV работают или, по крайней мере, не работают хорошо для моих Python 3.7.5 и OpenCV 3.4.8.

Ввод:

enter image description here

import cv2
import numpy as np

# read image
img = cv2.imread('apple.png')

# convert to gray
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# threshold grayscale image to extract glare
mask = cv2.threshold(gray, 220, 255, cv2.THRESH_BINARY)[1]

# Optionally add some morphology close and open, if desired
#kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7,7))
#mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel, iterations=1)
#kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3))
#mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel, iterations=1)


# use mask with input to do inpainting
result = cv2.inpaint(img, mask, 21, cv2.INPAINT_TELEA) 

# write result to disk
cv2.imwrite("apple_mask.png", mask)
cv2.imwrite("apple_inpaint.png", result)

# display it
cv2.imshow("IMAGE", img)
cv2.imshow("GRAY", gray)
cv2.imshow("MASK", mask)
cv2.imshow("RESULT", result)
cv2.waitKey(0)


С пороговым значением изображения:

enter image description here

Результат:

enter image description here

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