3

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

我尝试了一些 OpenCV 形态学函数,如腐蚀、打开、关闭,但结果不是我需要的。我也尝试过使用精明的边缘,但我想要进行一些处理的一些对角线也消失了。 是 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)
4

1 回答 1

2

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

第一步是将图像读取为 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)

大纲

此处绘制了每列中钻头的直径:

直径

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

于 2019-08-08T16:52:57.770 回答