其他分享
首页 > 其他分享> > 使用OpenCV或Skimage填充图像中的孔

使用OpenCV或Skimage填充图像中的孔

作者:互联网

我试图为棋盘填充立体应用孔.棋盘处于微观尺度,因此避免灰尘很复杂……正如您所看到的:

enter image description here

因此,角落检测是不可能的.我尝试使用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)

输入图片:

enter image description here

出局:

enter image description here

注意:由于此函数也会替换角点像素的颜色,因此您可以起诉cv2.goodFeaturesToTrack函数来查找角点并限制对像素进行去噪

corners = cv2.goodFeaturesToTrack(gray, 100, 0.01, 30)
corners = np.squeeze(np.int0(corners))

标签:python,opencv,numpy,scipy,scikit-image
来源: https://codeday.me/bug/20190623/1267494.html