【问题标题】:How to remove white pixels that are not connected to a loop in binary image如何去除二进制图像中未连接到循环的白色像素
【发布时间】:2019-12-16 06:38:27
【问题描述】:

我有一个image,我已经对其进行了二值化处理,问题是我想删除该图像中未连接在循环中的白点,即小白点。原因是我想对该部分进行测量,如here.

我尝试了一些 OpenCV 形态学函数,如腐蚀、打开、关闭,但结果不是我需要的。我也尝试过使用精明的边缘,但我想要进行一些处理的一些对角线也消失了。 here 是 thresh(left) 和 canny(right) 的结果

我已经读到修剪是一个过程,在这个过程中我们删除了未连接但我不知道它是如何工作的像素? Opencv 中有这样的功能吗?

th3 = cv2.adaptiveThreshold(gray_img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)
th3=~th3
th3 = cv2.dilate(th3, cv2.getStructuringElement(cv2.MORPH_RECT,(3,3)))
th3 = cv2.erode(th3, cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)))
edged = cv2.Canny(gray_img,lower,upper)

【问题讨论】:

    标签: python python-3.x opencv image-morphology image-thresholding


    【解决方案1】:

    这个答案解释了如何测量钻头的直径:

    第一步是将图像读取为 2 通道(灰度)并使用 Canny 过滤器找到边缘:

    img = cv2.imread('/home/stephen/Desktop/drill.jpg',0)
    canny = cv2.Canny(img, 100, 100)
    

    使用np.argmax()的钻边:

    diameters = []
    # Iterate through each column in the image
    for row in range(img.shape[1]-1):
        img_row = img[:, row:row+1]
        start = np.argmax(img_row)
        end = np.argmax(np.flip(img_row))
        diameters.append(end+start)
        a = row, 0
        b = row, start
        c = row, img.shape[1]
        d = row, img.shape[0] - end
        cv2.line(img, a, b, 123, 1)
        cv2.line(img, c, d, 123, 1)
    

    这里绘制了每列钻头的直径:

    所有这些都假设您有一个对齐的图像。我使用this code 来对齐图像。

    【讨论】:

    • 这可以帮助我从线程部分提取一些特征,但我无法理解图表。什么是x轴,什么是y轴,峰谷是什么。如果你能解释一下,我能用这个算法找到钻头的一些螺纹特征吗?把我当成菜鸟
    • 请检查我的编辑。我在图形图像中叠加了钻头。
    • 先生,我无法像您一样对齐我的图像,您能告诉我您在该代码链接中使用的步骤吗?
    猜你喜欢
    • 2021-10-12
    • 2017-07-19
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多