Как определить близлежащие пиксели с одинаковой интенсивностью на изображении? - PullRequest
3 голосов
/ 06 марта 2020

У меня есть изображение, как показано ниже, и я создал маску для этого изображения (красные точки генерируются из маски). Точки в маске в идеале должны покрывать все черные точки на изображении, но, поскольку у меня есть только одна координата для каждого черного пятна, результирующее изображение выглядит так, как показано ниже.

enter image description here

Как определить окружающие пиксели (серые и светло-черные) и пометить их? Есть ли способ или метод, который я могу найти и реализовать.

1 Ответ

1 голос
/ 07 марта 2020

Если я правильно вас понимаю, вы хотите преобразовать все окружающие серые и темные пиксели в красный. Если это так, вот подход, использующий OpenCV . Идея состоит в том, чтобы загрузить изображение, преобразовать его в оттенки серого , затем Порог Оцу , чтобы получить 1-канальное двоичное изображение. Это даст нам маску, в которой мы можем использовать np.where для окрашивания пикселей в красный цвет, если на маске есть белые пиксели. Вот результаты:

Двоичная маска

enter image description here

Результат

enter image description here

import cv2
import numpy as np

# Load image, grayscale, Otsu's threshold
image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY_INV)[1]

# Color pixels red where there are white pixels on the mask
image[np.where(thresh==255)] = [0,0,255]

# Display
cv2.imshow('thresh', thresh)
cv2.imshow('image', image)
cv2.waitKey()
...