我试图为棋盘填充立体应用孔。棋盘处于微观尺度,因此避免灰尘很复杂......正如您所见:
因此,角落检测是不可能的。我尝试使用SciPy的binary_fill_holes或类似的方法,但我有一个完整的黑色图像,我不明白。
答案 0 :(得分:4)
这是一个用大多数相邻像素所具有的颜色替换每个像素的颜色的函数。
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)
输入图片:
Out put:
注意:由于此功能也会替换角点像素的颜色,因此您可以起诉cv2.goodFeaturesToTrack
函数来查找角点并限制像素的去噪
corners = cv2.goodFeaturesToTrack(gray, 100, 0.01, 30)
corners = np.squeeze(np.int0(corners))
答案 1 :(得分:1)
您可以使用形态:扩张,然后以相同的内核大小进行侵蚀。