python判断图片主颜色

news2025/2/25 11:18:40

一 、 问题:python判断图片主颜色

python判断图片主颜色(HSV)

二 、 项目背景:

app选项是否能被点击,判断执行逻辑。做自动化测试的朋友肯定遇到好多次,按钮属性无法判别时,就需要自己将app选项颜色进行判断。网上大多数方案:通过图片AI识别,识别精度再高也不能到达百分百。就会识别错误几个选项,导致大批量的测试失败几次。
决定用RGB值判断图片主颜色,结果发现颜色模型太复杂,太烧脑细胞,果断放弃。
在这里插入图片描述

三 、解决方案:

我个人的方案就是用过app选项颜色RGB值判断,执行会百分百成功。RGB值对我们个人不太友好,值的范围也不好弄清楚,所以我采用让人更容易理解的HSV值去判断app选项的颜色。
![在这里插入图片描述](https://img-blog.csdnimg.cn/94d3c979d2764fd1988592d30f19c71f.png)

在这里插入图片描述

在这里插入图片描述
直接上代码

import colorsys
import PIL.Image as Image


# 获取图片主要颜色rgb值
def get_dominant_color(image):
    max_score = 0.0001
    dominant_color = None
    for count,(r,g,b) in image.getcolors(image.size[0]*image.size[1]):
    # 转为HSV标准
        saturation = colorsys.rgb_to_hsv(r/255.0, g/255.0, b/255.0)[1]
        y = min(abs(r*2104+g*4130+b*802+4096+131072)>>13,235)
        y = (y-16.0)/(235-16)

        #忽略高亮色
        if y > 0.9:
            continue
        score = (saturation+0.1)*count
        if score > max_score:
            max_score = score
            dominant_color = (r,g,b)
    return dominant_color


# 图片rgb值转为hsv
def rgb2hsv(r, g, b):
    r, g, b = r/255.0, g/255.0, b/255.0
    mx = max(r, g, b)
    mn = min(r, g, b)
    m = mx-mn
    if mx == mn:
        h = 0
    elif mx == r:
        if g >= b:
            h = ((g-b)/m)*60
        else:
            h = ((g-b)/m)*60 + 360
    elif mx == g:
        h = ((b-r)/m)*60 + 120
    elif mx == b:
        h = ((r-g)/m)*60 + 240
    if mx == 0:
        s = 0
    else:
        s = m/mx
    v = mx

    #此时h,s,v值范围分别是0-360, 0-1, 0-1,在OpenCV中,H,S,V范围是0-180,0-255,0-255,加上下面代码转换:
    H = h / 2
    S = s * 255.0
    V = v * 255.0

    return H,S,V
# # 返回值是255 100 100的范围
#     return h,s*100,v*100


def pan_duan_yan_se(h_0,s_0,v_0):
    if 0<=h_0<180 and 0<=s_0<255 and 0<=v_0<46 :
        print("黑色")
    elif 0<=h_0<180 and 0<=s_0<43 and 46<=v_0<220:
        print("灰色")
    elif 0<=h_0<180 and 0<=s_0<30 and 221<=v_0<255:
        print("白色")
    elif (0<=h_0<10 or 156<=h_0<180) and 43<=s_0<255 and 46<=v_0<255:
        print("红色")
    elif 11<=h_0<25 and 43<=s_0<255 and 16<=v_0<255:
        print("橙色")
    elif 26<=h_0<34 and 43<=s_0<255 and 46<=v_0<255:
        print("黄色")
    elif 35<=h_0<77 and 43<=s_0<255 and 46<=v_0<255:
        print("绿色")
    elif 78<=h_0<99 and 43<=s_0<255 and 46<=v_0<255:
        print("青色")
    elif 100<=h_0<124 and 43<=s_0<255 and 46<=v_0<255:
        print("蓝色")
    elif 125<=h_0<155 and 43<=s_0<255 and 46<=v_0<255:
        print("紫色")
    else:
        print("色调H超出范围,饱和度S,亮度V明度")




if __name__ == '__main__':
    image = Image.open(放自己图片保存路径)
    image = image.convert('RGB')
    
    print(get_dominant_color(image))
    print(type(get_dominant_color(image)))
    r, g, b = get_dominant_color(image)[0], get_dominant_color(image)[1], get_dominant_color(image)[2]
    hsv_value = rgb2hsv(r, g, b)
    print(hsv_value)
    h_0 = hsv_value[0]
    s_0 = hsv_value[1]
    v_0 = hsv_value[2]
    pan_duan_yan_se(h_0,s_0,v_0)

在网上查了好多的资料,发现都转换为RGB值,然后就不好判断了,因为自己项目中要用,就赶快写一个HSV判断图片主颜色,这个方案仅供大家参考学习,如果有不当之处,请多多包含。修改其中的一些代码放在自己项目中,希望可以帮到小伙伴。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1165054.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

shell script中的数值运算declare和$((运算式 ))

linux中变量定义默认是字符串类型&#xff0c;如要进行数值运算&#xff0c;需要先声明变量类型&#xff0c;或者通过固定格式来计算 看案例 如果不通过固定格式&#xff0c;直接 echo 55 如图&#xff0c;结果显示的55本身 可以写成 declare -i var#声明变量integrate类型&…

网络架构学习之FCNVMB(基于U-Net架构)

目录 一、U-Net介绍 1.1 网络简单介绍 1.2 网络特点 二、FCNVMB介绍 2.1 文章简介 2.2 网络简单介绍 2.3 代码介绍 2.4 跳跃连接 2.5 训练过程 2.6 FCNVMB与InversionNet的比较 一、U-Net介绍 1.1 网络简单介绍 U-Net是基于全卷积网络下一个语义分割应用于生物医学的深…

PC端视频编辑处理的全方位解决方案

视频已经成为企业传播信息、展示品牌形象的重要工具。然而&#xff0c;制作高质量的视频并非易事&#xff0c;需要专业的技术和设备。这就是美摄科技发挥作用的地方。我们为企业提供一站式的PC端视频编辑处理解决方案&#xff0c;帮助企业轻松制作出专业级别的视频。 美摄科技…

Kubernetes 架构

Kubernetes 架构 Kubernetes 最初源于谷歌内部的 Borg,提供了面向应用的容器集群部署和管理系统。Kubernetes 的目标旨在消除编排物理 / 虚拟计算,网络和存储基础设施的负担,并使应用程序运营商和开发人员完全将重点放在以容器为中心的原语上进行自助运营。Kubernetes 也提…

2021~2023年度长垣起重机博览会最佳产品彩页(修订中)

1.河南恒达 比较完善的起重量限制器产品线分类&#xff0c;提供了监控参数一览表。 2.沪源电机 详细的电机参数&#xff0c;这基本上可以作为电机发展的历史资料来搜集。 包含效率&#xff0c;功率因数&#xff0c;堵转电流等其他厂商很少给出的参数&#xff0c;可以做手册用…

【Redis】安装(Linuxwindow)及Redis的常用命令

Redis简介 Redis是一个开源&#xff08;BSD许可&#xff09;&#xff0c;内存存储的数据结构服务器&#xff0c;可用作数据库&#xff0c;高速缓存和消息队列代理。 它支持字符串、哈希表、列表、集合、有序集合&#xff0c;位图&#xff0c;hyperloglogs等数据类型。内置复…

2024年天津中德应用技术大学专升本招生专业限制目录

2024年天津中德应用技术大学专升本招生专业限制 专科可允许报考的专业目录范围 机械电子工程&#xff1a; 机电一体化技术、数控技术、数控设备应用与维护、模具设计与制造、精密机械技术、材料工程技术、机械设计与制造、计算机辅助设计与制造、焊接技术与自动化、电气自动化…

Yolov8目标识别与实例分割——版本比对与原理解析

前言 YOLO是一种基于图像全局信息进行预测并且它是一种端到端的目标检测系统&#xff0c;最初的YOLO模型由Joseph Redmon和Ali Farhadi于2015年提出&#xff0c;并随后进行了多次改进和迭代&#xff0c;产生了一系列不同版本的YOLO模型&#xff0c;如YOLOv2、YOLOv3、YOLOv4&a…

Java学习_day07_类的构造器代码块继承封装多态

文章目录 构造器格式注意点使用 代码块格式注意 继承格式注意点 封装包声明包导包注意点 访问修饰符 多态格式注意点代码演示 构造器 Java中每个类都至少有一个构造器&#xff0c;当程序员没有明确编写构造器时&#xff0c;Java编译器会自动为类添加一个无参的构造器。构造器通…

vue封装独立组件:实现分格密码输入框/验证码输入框

目录 第一章 实现效果 第二章 核心实现思路 第三章 封装组件代码实现 第一章 实现效果 为了方便小编的父组件随便找了个页面演示的通过点击按钮&#xff0c;展示子组件密码输入的输入框通过点击子组件输入框获取焦点&#xff0c;然后输入验证码数字即可子组件的确定按钮是验…

nodejs+vue+python+php智能停车系统-计算机毕业设计-微信小程序-安卓

随着网络技术的不断发展&#xff0c;多媒体技术应用渐渐的出现在教育领域中&#xff0c;智能停车算法研究管理已经成为社会的一个热门话题。 智能停车算法研究系统主要是借助计算机&#xff0c;通过对智能停车算法研究系统所需的信息管理&#xff0c;增加用户的选择&#xff0c…

【MyBatis Plus】使用 MyBatis Plus 完成分页功能,以及通用分页实体的实现

文章目录 一、MyBatis Plus 分页插件1.1 了解 MyBatis Plus 的插件功能1.2 配置分页插件1.3 测试分页功能 二、实现通用分页实体2.1 分页查询需求2.2 分页实体类2.3 分页查询接口2.4 通用实体的转换2.4.1 PageQuery 转换为 MP Page2.4.2 分页结果 PO 转换 VO 一、MyBatis Plus …

canvas实现环形进度条

与setTimeout和setInterval不同&#xff0c;requestAnimationFrame不需要设置时间间隔。 效果图 源代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Canvas progress</title> </head&g…

GCC 编译器 详细总结

前言&#xff1a; 源文件需要经过编译才能生成可执行文件。 在 Windows 下进行开发时&#xff0c;只需要点几个按钮即可编译&#xff0c;集成开发环境(比如 Visual studio)已经将各种编译 工具的使用封装好了。 Linux 下也有很优秀的集成开发工具&#xff0c;但是更多的时候…

oracle如果不适用toad或者plsql工具如何获取索引建表语句

select dbms_lob.substr(dbms_metadata.get_ddl(INDEX,INDEX_NAME,DIXON))||; from dba_indexes where ownerDIXON这个语句可以获取dixon用户的所有索引创建语句&#xff0c;sql脚本形式呈现 点开一个语句查看 如果不使用dbms_lob.substr这个函数最后得到是一个clob selec…

基于Python+Django+Vue在线图书借阅网站、图书管理系统 - 毕业设计 - 课程设计

文章目录 源码下载地址项目介绍项目功能界面预览项目备注毕设定制&#xff0c;咨询 源码下载地址 点击这里下载代码 项目介绍 这是一个基于pythonvue开发的图书借阅网站。平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行…

牛客网刷题-(10)

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

Mongoose 开源库--SNTP 网络校时使用笔记

一、SNTP介绍 SNTP是一种简单的网络时间协议&#xff0c;它可以通过网络协议同步计算机的时间&#xff0c;时间的精度不如NTP。 关于SNTP介绍&#xff0c;可以参考 https://www.ionos.com/digitalguide/server/know-how/sntp-simple-network-time-protocol/ 或者 https://time…

docker部署Jenkins(Jenkins+Gitlab+Maven实现CI/CD)

GitLab介绍 GitLab是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的Web服务&#xff0c;可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能&#xff0c;能够浏览源代码&#xff0c;管理缺陷和注释。…