使用OpenCV或Skimage在图像中填充空洞
我试图为立体声应用的棋盘填充孔。棋盘是在微观尺度因此是复杂的,以避免灰尘如...可以看到:使用OpenCV或Skimage在图像中填充空洞
因此,角检测是不可能的。我试着用SciPy的binary_fill_holes或类似的方法,但我有一个完整的黑色图像,我不明白。
可以使用下面的函数,以去除孔中,通过与它的最大的颜色来代替每个像素的颜色的环境像素:
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)
输入图像:
出放:
注:由于此函数替换角落像素的颜色太深,你可以起诉cv2.goodFeaturesToTrack
功能找到角落和限制去噪的像素
corners = cv2.goodFeaturesToTrack(gray, 100, 0.01, 30)
corners = np.squeeze(np.int0(corners))
感谢您的有趣结果! :)它运作良好,但缺点是角落扩散导致我认为错误的增加。或许我可能会在你改正后腐蚀? – user3601754
我认为是一个中值过滤器,但它导致同样的问题。 – user3601754
@ user3601754是的,我正要添加一个解释。我认为有一种方式可以通过找到角落并逃避对他们的操作来拒绝。 – Kasramvd
您可以使用形态:扩张,然后侵蚀相同的内核大小。
尝试使用开口 – PSchn
或者反转图像,使用查找轮廓,将它们填充黑色并再次反转 – PSchn