Reconocimiento de color de Python para imágenes.

Escenario: al realizar una prueba de estrés, es necesario determinar si un área determinada de la imagen es negra

La biblioteca OpenCV se usa aquí para identificar el color de la imagen, que puede identificar casi todos los colores comunes

directamente en el código

import cv2
import numpy as np
import collections


class colorList:
    def getColorList(self):
        dict = collections.defaultdict(list)

        # 黑色
        lower_black = np.array([0, 0, 0])
        upper_black = np.array([180, 255, 46])
        color_list = []
        color_list.append(lower_black)
        color_list.append(upper_black)
        dict['黑色'] = color_list

        # 灰色
        lower_gray = np.array([0, 0, 46])
        upper_gray = np.array([180, 43, 220])
        color_list = []
        color_list.append(lower_gray)
        color_list.append(upper_gray)
        dict['灰色'] = color_list

        # 白色
        lower_white = np.array([0, 0, 221])
        upper_white = np.array([180, 30, 255])
        color_list = []
        color_list.append(lower_white)
        color_list.append(upper_white)
        dict['白色'] = color_list

        # 红色
        lower_red = np.array([156, 43, 46])
        upper_red = np.array([180, 255, 255])
        color_list = []
        color_list.append(lower_red)
        color_list.append(upper_red)
        dict['红色'] = color_list

        # 红色2
        lower_red = np.array([0, 43, 46])
        upper_red = np.array([10, 255, 255])
        color_list = []
        color_list.append(lower_red)
        color_list.append(upper_red)
        dict['红色2'] = color_list

        # 橙色
        lower_orange = np.array([11, 43, 46])
        upper_orange = np.array([25, 255, 255])
        color_list = []
        color_list.append(lower_orange)
        color_list.append(upper_orange)
        dict['橙色'] = color_list

        # 黄色
        lower_yellow = np.array([26, 43, 46])
        upper_yellow = np.array([34, 255, 255])
        color_list = []
        color_list.append(lower_yellow)
        color_list.append(upper_yellow)
        dict['黄色'] = color_list

        # 绿色
        lower_green = np.array([35, 43, 46])
        upper_green = np.array([77, 255, 255])
        color_list = []
        color_list.append(lower_green)
        color_list.append(upper_green)
        dict['绿色'] = color_list

        # 青色
        lower_cyan = np.array([78, 43, 46])
        upper_cyan = np.array([99, 255, 255])
        color_list = []
        color_list.append(lower_cyan)
        color_list.append(upper_cyan)
        dict['青色'] = color_list

        # 蓝色
        lower_blue = np.array([100, 43, 46])
        upper_blue = np.array([124, 255, 255])
        color_list = []
        color_list.append(lower_blue)
        color_list.append(upper_blue)
        dict['蓝色'] = color_list

        # 紫色
        lower_purple = np.array([125, 43, 46])
        upper_purple = np.array([155, 255, 255])
        color_list = []
        color_list.append(lower_purple)
        color_list.append(upper_purple)
        dict['紫色'] = color_list

        return dict

    # 处理图片
    def get_color(self):
        print('颜色对比')
        img = cv2.imread('D:\sdcard\XiaLa.png')
        hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
        maxsum = -100
        color = None
        color_dict = colorList().getColorList()
        for d in color_dict:
            mask = cv2.inRange(hsv, color_dict[d][0], color_dict[d][1])
            binary = cv2.threshold(mask, 127, 255, cv2.THRESH_BINARY)[1]
            binary = cv2.dilate(binary, None, iterations=2)
            img, cnts = cv2.findContours(binary.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
            sum = 0
            for c in img:
                sum += cv2.contourArea(c)
            if sum > maxsum:
                maxsum = sum
                color = d
        return color


if __name__ == '__main__':
    print(colorList().get_color())

El resultado de la operación es el siguiente:

 

El color se puede juzgar y las cosas que se pueden hacer son mucho más convenientes.

Por ejemplo, al realizar una prueba de estrés, es necesario determinar si el área de la captura de pantalla es negra, si es negra, dejará de ejecutarse, y si no lo es, continuará.

¡DE ACUERDO! Conveniente y fácil de entender, el código se puede usar directamente

Supongo que te gusta

Origin blog.csdn.net/suixing6/article/details/128187478
Recomendado
Clasificación