我試圖爲立體聲應用的棋盤填充孔。棋盤是在微觀尺度因此是複雜的,以避免灰塵如...可以看到:使用OpenCV或Skimage在圖像中填充空洞
因此,角檢測是不可能的。我試着用SciPy的binary_fill_holes或類似的方法,但我有一個完整的黑色圖像,我不明白。
我試圖爲立體聲應用的棋盤填充孔。棋盤是在微觀尺度因此是複雜的,以避免灰塵如...可以看到:使用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