if __name__ == "__main__": img_name = "img/cap.png" img = cv2.imread(img_name) gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转灰度图 bin_img = get_binary_img(gray_img) # 二值化 # print(bin_img[370][360]) #需要注意的是图像转为数组的时候 x,y是反过来的 # 边界追踪 flag1 = 0 find, start_i, start_j = get_left_up_start_pt(flag1, bin_img) # cv.circle(bin_img, (start_i, start_j), 3, (0, 0, 0), -1) # print("start_x, start_y = ", start_i, start_j) # cv.imshow("1", bin_img) contour_img = np.zeros(shape=bin_img.shape, dtype=np.uint8) contour_img += 255 flag2, contour_img = trace_contour(bin_img, find, start_i, start_j, contour_img) if flag2 == 1: find1, start_i1, start_j1 = get_left_up_start_pt(flag2, bin_img) f, contour_img = trace_contour(bin_img, find1 + 1, start_i1, start_j1, contour_img) contour_img[0] = 255 contour_img[len(contour_img) - 1] = 255 for w in range(len(contour_img)): contour_img[w][0] = 255 contour_img[w][len(contour_img[0]) - 1] = 255 cv2.imshow("img", contour_img) cv2.waitKey() cv2.destroyAllWindows()
时间: 2024-01-31 14:03:25 浏览: 187
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
5星 · 资源好评率100%
这段代码完成了对一张图像进行边界追踪并显示结果的过程。具体实现流程如下:
1. 设置图像文件名`img_name`,读取图像并将其转换为灰度图像`gray_img`。
2. 对灰度图像进行二值化处理,得到二值化图像`bin_img`。
3. 调用`get_left_up_start_pt`函数查找左上角的起始点。
4. 创建一个与二值化图像具有相同形状和数据类型的全零数组`contour_img`,用于存储轮廓线图像。
5. 调用`trace_contour`函数进行边界追踪,得到轮廓线图像。
6. 如果边界追踪成功,则继续查找右下角的起始点并进行边界追踪,得到完整的轮廓线图像。
7. 最后将轮廓线图像显示出来。
需要注意的是,在调用`get_left_up_start_pt`函数查找起始点时,输入参数`flag`的取值为0,表示查找左上角的起始点;在调用`trace_contour`函数进行边界追踪时,输入参数`find`的值为上一步查找到的起始点找到的标志,即0或1。
阅读全文