判断二维码颜色

 

判断所给二维码图片是红色还是黑色

经过改进,选择了较为稳妥的方式,截取图片中心50x50像素区域进行判断,均衡了速度和正确率,红色二维码总体红色像素比应该是多于黑色的

import cv2
import numpy as np

# 读取图像并将其转换为HSV颜色空间
img = cv2.imread("D://black.png")


# 获取图像的高度和宽度
h, w = img.shape[:2]

# 计算中心区域的左上角和右下角坐标
center_x, center_y = w // 2, h // 2
left, top = center_x - 25, center_y - 25
right, bottom = center_x + 25, center_y + 25

# 切片操作截取中心50x50的区域
cut = img[top:bottom, left:right]
cv2.imwrite("D://cut.png", cut)

hsv = cv2.cvtColor(cut, cv2.COLOR_BGR2HSV)



# 定义红色的HSV阈值范围
lower_red = np.array([0, 255, 0])
upper_red = np.array([10, 255, 10])
stand_black = np.array([0, 0, 0])


red_lower = (0, 50, 50)
red_upper = (10, 255, 255)
black_lower = (0, 0, 0)
black_upper = (180, 255, 30)

# 创建掩膜
red_mask = cv2.inRange(hsv, red_lower, red_upper)
black_mask = cv2.inRange(hsv, black_lower, black_upper)

# 计算红色像素和黑色像素的数量
red_pixels = cv2.countNonZero(red_mask)
black_pixels = cv2.countNonZero(black_mask)

# 判断哪种像素较多
if red_pixels > black_pixels:
    print('红色', red_pixels, black_pixels)
else:
    print('黑色', red_pixels, black_pixels)
# 判断二维码的颜色