如何移除二进制图像中未连接到循环的白色像素

2024-09-27 09:36:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个image,我对它进行了二值化,问题是我想去除图像中没有连接成循环的白点,即小白点。原因是我想对该部分进行测量,如图here.所示

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

我已经读到修剪是一个过程中,我们删除像素没有连接,但我不知道它是如何工作的?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)

Tags: 函数rect图像imageimghere原因cv2
1条回答
网友
1楼 · 发布于 2024-09-27 09:36:22

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

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

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

canny

钻孔的边缘使用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)

outline

每列中的钻孔直径如下所示:

diameters

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

相关问题 更多 >

    热门问题