import cv2 import numpy as np # https://www.cnblogs.com/meikaiyuan/p/16805539.html def read_image(path): raw = cv2.imread(path) # 设定颜色HSV范围,假定为红色 color_lower = np.array([0, 148, 116]) color_upper = np.array([50, 220, 203]) # 将图像转化为HSV格式 hsv = cv2.cvtColor(raw, cv2.COLOR_BGR2HSV) # 去除颜色范围外的其余颜色 mask = cv2.inRange(hsv, color_lower, color_upper) # cv2.imshow("mask", mask) # 二值化操作 ret, binary = cv2.threshold(mask, 0, 255, cv2.THRESH_BINARY) # 膨胀操作,因为是对线条进行提取定位,所以腐蚀可能会造成更大间隔的断点,将线条切断,因此仅做膨胀操作 kernel = np.ones((5, 5), np.uint8) dilation = cv2.dilate(binary, kernel, iterations=1) # # img2 = cv2.bitwise_and(img, img, mask=mask) cv2.imshow('image', dilation) cv2.waitKey(0) cv2.destroyAllWindows() # 获取图像轮廓坐标,其中contours为坐标值,此处只检测外形轮廓 contours, hierarchy = cv2.findContours(dilation, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) cv2.approxPolyDP(contours[0], 0.01, True) if __name__ == '__main__': read_image("../data/004.png")