# 导库 import cv2 import numpy as np import glob # 图片批量处理,并读取 for files in glob.glob(r'D:\pycharm\*.jpg'): img = cv2.imread(files) # 读取图片:注意imread读的图是RGB格式的 # 显示原图 cv2.imshow("红绿灯", img) #显示ROI区域:这个区域是在原图中截取的 ROI = img[400:500, 560:720] cv2.namedWindow("ROI", 0) cv2.resizeWindow("ROI", 400, 300) cv2.imshow("ROI", ROI) # 等待显示 cv2.waitKey(0) cv2.destroyAllWindows() # 把截取的图片另存 cv2.imwrite('D:\pycharm\save_test.jpg', ROI) hsv = cv2.cvtColor(ROI, cv2.COLOR_BGR2HSV) # 红色hsv颜色分量范围 lb_hsv_red = np.array([125, 49, 138]) up_hsv_red = np.array([180, 255, 255]) mask_red = cv2.inRange(hsv, lowerb=lb_hsv_red, upperb=up_hsv_red) # 中值滤波,去除噪点 red_blur = cv2.medianBlur(mask_red, 7) #取最大值255 r_color = np.max(red_blur) # 绿色hsv颜色分量范围 lb_hsv_g = np.array([49, 79, 137]) up_hsv_g = np.array([90, 255, 255]) mask_g = cv2.inRange(hsv, lowerb=lb_hsv_g, upperb=up_hsv_g) # 中值滤波,去除噪点 g_blur = cv2.medianBlur(mask_g, 7) #取最大值255 g_color = np.max(g_blur) # 黄色hsv颜色分量范围 lb_hsv_y = np.array([11, 67, 127]) up_hsv_y = np.array([34, 255, 255]) mask_y = cv2.inRange(hsv, lowerb=lb_hsv_y, upperb=up_hsv_y) # 中值滤波,去除噪点 y_blur = cv2.medianBlur(mask_y, 7) #取最大值255 y_color = np.max(y_blur) # 判断 if r_color == 255: print('红灯亮') # 因为图像是二值的图像,所以如果图像出现白点,也就是255,也就是红色 elif g_color == 255: print('绿灯亮') # 因为图像是二值的图像,所以如果图像出现白点,也就是255,也就是绿色 elif y_color == 255: print('黄灯亮') # 因为图像是二值的图像,所以如果图像出现白点,也就是255,也就是黄色 else: print('都不是') #调整显示窗口大小 cv2.namedWindow("red_hsv", 0) cv2.resizeWindow("red_hsv", 400, 300) cv2.namedWindow("green_hsv", 0) cv2.resizeWindow("green_hsv", 400, 300) cv2.namedWindow("yellow_hsv", 0) cv2.resizeWindow("yellow_hsv", 400, 300) # 显示 cv2.imshow("red_hsv", mask_red) cv2.imshow("green_hsv", mask_g) cv2.imshow("yellow_hsv", mask_y) cv2.waitKey(0) cv2.destroyAllWindows() 对图片进行识别的流程图 下方是识别的图片 gg
kk
pp
save_test