Вот функция, которая заменяет цвет каждого пикселя на цвет большинства соседних пикселей.
import numpy as np
import cv2
def remove_noise(gray, num):
Y, X = gray.shape
nearest_neigbours = [[
np.argmax(
np.bincount(
gray[max(i - num, 0):min(i + num, Y), max(j - num, 0):min(j + num, X)].ravel()))
for j in range(X)] for i in range(Y)]
result = np.array(nearest_neigbours, dtype=np.uint8)
cv2.imwrite('result2.jpg', result)
return result
Демо:
img = cv2.imread('mCOFl.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
remove_noise(gray, 10)
Входное изображение:
![введите здесь описание изображения](https://i.stack.imgur.com/AAypM.png)
Выход:
![введите здесь описание изображения](https://i.stack.imgur.com/PYttM.jpg)
Примечание. Поскольку эта функция также заменяет цвет угловых пикселей, вы можете использовать функцию cv2.goodFeaturesToTrack
, чтобы найти углы и ограничить шумоподавление для этих пикселей.
corners = cv2.goodFeaturesToTrack(gray, 100, 0.01, 30)
corners = np.squeeze(np.int0(corners))
person
kasravnd
schedule
24.09.2016