Python 对图片进行颜色识别

场景:在进行压力测试时,需要判断图片的某一块区域是否是黑色

这里使用的是OpenCV库对图片进行颜色的识别,几乎可以识别所有常见的颜色

直接上代码

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())

运行结果如下:

 

颜色可以判断出来了,可以做的事情就方便很多了

比如在尽行压力测试时,去判断截图区域是否是黑色,是黑色就停止运行,不是则继续。

OK!方便易懂,代码可直接用

Python图片的颜色和形状识别通常涉及到图像处理和计算机视觉领域,可以利用一些库如OpenCV、Pillow、matplotlib等来实现。下面是一个简要的过程: 1. **导入必要的库**:首先需要安装并导入像`PIL`(Python Imaging Library)用于基本的图片操作,`NumPy`处理数组数据,以及专门的图像处理库如`OpenCV`。 ```python import cv2 from PIL import Image import numpy as np ``` 2. **读取图片**:使用`Image.open()`打开图片,并转化为适合处理的格式。 ```python image = Image.open('example.jpg') ``` 3. **预处理**:调整图片大小,灰度化,二值化或应用色彩空间转换(比如HSV或RGB)以便于分析。 ```python gray_image = cv2.cvtColor(np.array(image), cv2.COLOR_BGR2GRAY) binary_image = cv2.threshold(gray_image, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1] ``` 4. **形状检测**:通过边缘检测(如Canny算子)、轮廓检测(`cv2.findContours()`)或角点检测等算法来识别出形状。 ```python contours, _ = cv2.findContours(binary_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) ``` 5. **颜色识别**:如果涉及颜色识别,可以利用`colorama`、`colour`等库,或者直接提取像素的RGB值,然后进行特定颜色范围的匹配。 ```python colors = image.getcolors() for color, count in colors: if color == (255, 0, 0): # 红色示例 print(f"红色区域有 {count} 个像素") ``` 6. **特征描述与匹配**:对于复杂的形状和颜色组合,可以使用更高级的技术,如HOG特征或SIFT/SURF特征匹配。 完成上述步骤后,可以根据实际需求对识别结果进行分析或进一步处理。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值