OpenCV inRange 函数使用详解

news2024/11/19 17:27:24

        本文是 OpenCV图像视觉入门之路的第6篇文章,本人详细的解决了RGB转HSV,HSV通过AI来进行HSV转 inRange() 函数的范围值操作,简单全面的解决了OpenCV对于图像中某个颜色的分析工作,本文通过识别红色区域和蓝色区域来编写示例程序和博客,也讲述了各种操作,例如:RGB转HSV、转换工具、公式转换、代码实现、猿如意中ChatGPT的使用、识别红色区域、调整V亮度、调整S饱和度、调整H色调、识别蓝色区域等等操作。

        AI未来相信会在我们的日常工作中有更高的出现频率,也可以帮助我们提高工作学习效率,目前VSCode中的ChatGPT国内服务器已经停止使用,大家可以下载猿如意体验使用ChatGPT!

本文作者原创,未经允许禁止转载。

OpenCV inRange 函数使用详解目录

1 RGB转HSV

1.1 转换工具

1.2 公式转换

2 代码实现

3 ChatGPT

4 识别红色区域

4.1 红色范围

4.2 V亮度调整

4.3 S饱和度调整

4.4 H色调调整

5 识别蓝色区域

5.1 蓝色范围

5.2 识别蓝色

5.3 识别蓝色


1 RGB转HSV

        最近一直在看OpenCV图像识别相关部分,在看到inRange函数的时候有点头大,主要是HSV色彩区域取某个颜色的HSV值搞得完全蒙了,看别的博客和文章都是一张漏斗图各个取值范围完全懵了。

1.1 转换工具

        程序员最重要的是解决问题的思路和办法,这里是菜鸟教程的转换工具很方便,也有相应的对照表:

RGB HSV 转换 | 菜鸟工具

1.2 公式转换

rgb 221,0,27 可以转换成 hsv 的格式,具体的方法如下:

首先,我们需要将 rgb 值转换成浮点数,方法是将每个值除以 255。因此,rgb(221,0,27) 可以转换成 (0.8666666666666667, 0.0, 0.10588235294117647)。

然后,我们可以使用以下公式来计算 hsv 值:

h = 色相,s = 饱和度,v = 明度

maxc = max(r, g, b)
minc = min(r, g, b)

if maxc == minc:
h = 0
elif maxc == r:
h = 60 * ((g - b) / (maxc - minc))
elif maxc == g:
h = 60 * (2 + (b - r) / (maxc - minc))
else:
h = 60 * (4 + (r - g) / (maxc - minc))

if h < 0:
h += 360

s = 0 if maxc == 0 else (1 - minc / maxc)
v = maxc

所以,rgb(221,0,27) 可以转换成 hsv(348.57142857142856, 1.0, 0.8666666666666667)。

注意:在计算 hsv 值时,色相 h 的单位是角度,饱和度 s 和明度 v 的单位都是百分比,它们的取值范围分别是 0 到 360、0 到 1 和 0 到 1。

2 代码实现

import cv2
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np

# 按间距中的绿色按钮以运行脚本。
if __name__ == '__main__':
    image = cv2.imread('D:/Jupyter_Notebooks/3.png')

    # 从RGB色彩空间转换到HSV色彩空间
    hsv = cv2.cvtColor(image, cv2.COLOR_RGB2HSV)

    # 颜色范围下限
    lower_threshold = np.array([110, 254, 220])
    # 颜色范围上限
    upper_threshold = np.array([180, 255, 255])

    # 使用inRange函数检测颜色
    mask = cv2.inRange(hsv, lower_threshold, upper_threshold)

    # 对原图像和掩码进行位运算
    result = cv2.bitwise_and(image, image, mask=mask)

    # H、S、V范围二:
    cv2.imshow("result", mask)
    cv2.imshow("image", image)

    cv2.waitKey(0)
    cv2.destroyAllWindows()

3 ChatGPT

        这里用到了ChatGPT,很感谢猿如意工具能集成ChatGPT并且目前还可以使用(VSCode 国内版的ChatGPT已经无法连接),面向AI编程未来需要学会。

4 识别红色区域

        我这里在桌面截取了一部分应用识别出RGB红色的颜色是221,0,27,我先在菜鸟教程 RGB转HSV颜色后问了AI HSV转RGB它回答 H 0-180 S、V 0-255

4.1 红色范围

        我们主要想识别 网易云 和 有道 的红色颜色,这个不理想所以需要调整取值范围,

    # 颜色范围下限
    lower_threshold = np.array([0, 255, 255])
    # 颜色范围上限
    upper_threshold = np.array([180, 255, 255])

4.2 V亮度调整

        因为我们这个颜色是取的网易云的所以要想同时看到有道还需要调整 S饱和度

    # 颜色范围下限
    lower_threshold = np.array([0, 255, 200])
    # 颜色范围上限
    upper_threshold = np.array([180, 255, 255])

4.3 S饱和度调整

        我们V和S值都调整完了,发现火绒的颜色也在取值范围内,所以现在需要调整H的范围将火绒的黄红色去掉

    # 颜色范围下限
    lower_threshold = np.array([0, 254, 200])
    # 颜色范围上限
    upper_threshold = np.array([180, 255, 255])

4.4 H色调调整

        可以发现现在较为完美的实现了 有道 网易云 红色区域的识别。

    # 颜色范围下限
    lower_threshold = np.array([120, 254, 200])
    # 颜色范围上限
    upper_threshold = np.array([180, 255, 255])

5 识别蓝色区域

        识别腾讯会议 蓝色颜色范围是RGB(3,131,254),通过转HSV得出 0.5817,0.9882,0.9961 ChatGPT 转换

5.1 蓝色范围

        我们主要想识别 腾讯会议和 腾讯微云。
 

    # 颜色范围下限
    lower_threshold = np.array([104, 250, 250])
    # 颜色范围上限
    upper_threshold = np.array([105, 255, 255])

5.2 识别蓝色

        经过调整可以看到腾讯会议 和部分 ToDesk 颜色有一样的区域不过都过滤出来了,可以通过ROI截取功能截取掉多余的部分。

OpenCV ROI截取 、设置、保存_双子座断点的博客-CSDN博客_opencv截取roi

    # 颜色范围下限    210
    lower_threshold = np.array([10, 250, 252])
    # 颜色范围上限
    upper_threshold = np.array([20, 255, 255])

5.3 识别蓝色

        可以看到最终识别的掉过还是可以的部分杂点可以过滤一下

    # 颜色范围下限    210
    lower_threshold = np.array([10, 210, 255])
    # 颜色范围上限
    upper_threshold = np.array([20, 215, 255])

 

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

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

相关文章

从交互设计师的角度,聊聊设计工具的那些事

工欲善其事&#xff0c;必先利其器&#xff0c;这句话是出自论语&#xff0c;讲的是要做好一件事&#xff0c;工具是非常重要的&#xff0c;作为一个设计师&#xff0c;设计工具对于我们的重要性毋庸置疑&#xff0c;每天都在接触&#xff0c;也有很多感悟和心得。 我从事设计…

羟基生物素(Biotin-OH),生物素引发剂(Biotin-Cl)

产品名称&#xff1a;羟基生物素&#xff0c;生物素引发剂 英文名称&#xff1a;Biotin-Cl&#xff0c;Biotin-OH 含biotin-DSPE的胰岛素脂质体 合成生物素一硬脂酥磷脂酥乙醇胺(biotin-DSPE),制备含 biotin-DSPE 的胰岛素脂质体,以粒径和包封率为指标 制备生物素修饰的胰岛素…

如何通过视频推广的方式帮助外贸B2B企业获得询盘

会有外贸企业比较烦恼&#xff0c;总是寻找不到精准客户&#xff0c;也很少有客户向自己询盘&#xff0c;企业需要订单&#xff0c;自己的品牌想要在目标市场被知晓&#xff0c;如何解决这些问题呢&#xff1f;我们可以跟随现阶段流行的趋势——视频推广&#xff0c;接下来请慢…

函数作图的技巧(高数)

前言 从初中开始&#xff0c;我们就开始用笔在平面直角坐标系上作函数图象。随着对函数研究的不断深入&#xff0c;对作出的函数图象的精准度的要求也越来越高。以往我们只需要描一下点&#xff0c;在将点连起来即可。但用这种方法的话偏差可能会很大&#xff0c;所以我们不妨…

数据仓库基础与Apache Hive入门

数据仓库基本概念 数据仓库&#xff0c;简称数仓&#xff0c;用于存储、分析、报告的数据系统。数据仓库的目的是构建面向分析的集成化数据环境&#xff0c;分析结果为企业提供决策支持。 数据仓库本身并不生产任何数据&#xff0c;其数据来源于不同的外部系统同时数据仓库自…

前端工程化与 webpack:webpack 中的 loader

1. loader 概述 在实际开发过程中&#xff0c;webpack 默认只能打包处理以 .js 后缀名结尾的模块。其他非 .js 后缀名结尾的模块&#xff0c; webpack 默认处理不了&#xff0c;需要调用 loader 加载器才可以正常打包&#xff0c;否则会报错&#xff01; loader 加载器的作用…

【JavaEE】【Servlet API详解】重点!!!

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录【Servlet API概述】【HttpServlet】【HttpServletRequest】【HttpServletResponse】写例子&#xff1a;表白墙表白墙参考代码小结坚持一定很酷&#xff01; 【Servlet API概述】 API其实就是一组类/方法Servlet提…

CANoe-VN5000设备的指示灯含义

我们以VN5650为例: Power 当设备通电时,Power灯亮起 Sync 当设备同步时,Sync灯亮起。Vector设备有三种时间同步方式:PTP、HW-SYNC、SW-SYNC ColorSync StateDescriptionOffNot Configured此设备没有激活的主协议或从协议,或者尚未加载配置OrangeConfigured, waiting for …

Redis布隆过滤器

什么是布隆过滤器 布隆过滤器(Bloom Filter)是一个二进制向量和一系列随机映射函数实现&#xff0c;用于判断一个元素是否在集合中。 如果想要判断一个元素是不是在一个集合里&#xff0c;一般想到的是将所有元素保存起来&#xff0c;然后通过比较确定。链表&#xff0c;树等…

Three JS 调研

0. 结论 three.js是使用WebGL来绘制三维效果的&#xff0c;核心数据是3D对象和三维模型&#xff0c;更多的是关注如何通过webgl更精细而美的渲染数据 three.js相当于封装了webgl&#xff0c;但还是很底层&#xff0c;并不是一个类似于cesium或者mapbox这样的成熟地图框架&…

一文掌握MyBatis的动态SQL使用与原理

摘要&#xff1a;使用动态 SQL 并非一件易事&#xff0c;但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言&#xff0c;MyBatis 显著地提升了这一特性的易用性。本文分享自华为云社区《MyBatis详解 - 动态SQL使用与原理》&#xff0c;作者&#xff1a;龙哥手记 。 动态 …

Ajax(JavaWeb-Ajax、跨域等)

1.JavaWeb - Ajax 概念&#xff1a;AJAX&#xff08;Asynchronous Java JavaScript And Xml &#xff09;&#xff1a;异步的JavaScript和Xml AJAX作用&#xff1a; 与服务器进行数据交换&#xff1a;通过AJAX可以给服务器发送请求&#xff0c;并获取服务器响应的数据。 使用…

笔试训练(6)

笔试题1:将一个字符串转化成整数:把字符串转换成整数__牛客网 将一个字符串转化成整数&#xff0c;要求不能使用字符串转化成整数的库函数&#xff0c;数值为0或者字符串不是一个合法的数值那么返回0 输入描述:输入一个字符串&#xff0c;包含数字字母符号&#xff0c;可以为空…

【八股文大白话整理】

Java 重载和重写的区别 这两个都是多态的一种表现形式。 重载是在编译器通过方法中形参的静态类型确定调用方法版本的过程&#xff0c;是多态在编译期的表现形式。判定只有两个条件&#xff1a;1. 方法名一致 2. 形参列表不同 重写是在方法运行时&#xff0c;通过调用者的实际…

Transforming the Latent Space of StyleGAN for Real Face Editing翻译

点击下载论文 摘要 尽管最近在使用StyleGAN进行语义处理方面取得了进展&#xff0c;但真实人脸的语义编辑仍然具有挑战性。W空间和W空间之间的差距要求在重构质量和编辑质量之间进行权衡。为了解决这个问题&#xff0c;我们建议通过用基于注意力的transformers替换StyleGAN映射…

深入剖析Arthas源码

一. 前言 Arthas 相信大家已经不陌生了&#xff0c;肯定用过太多次了&#xff0c;平时说到 Arthas 的时候都知道是基于Java Agent的&#xff0c;那么他具体是怎么实现呢&#xff0c;今天就一起来看看。 首先 Arthas 是在 GitHub 开源的&#xff0c;我们可以直接去 GitHub 上获…

智能表格软件-FineReport JS实现自定义按钮快速给参数赋指定范围值

1. 概述 1.1 预期效果 周报、月报、季报、年报中有参数查询时&#xff0c;每次都需要手动选择&#xff0c;比较繁琐&#xff0c;所以就需要一种快速筛选的方法&#xff0c;只需点击某个按钮&#xff0c;就能准确定位到合适的时间范围&#xff0c;如下图所示&#xff1a; 1.2 实…

JMeter+Ant+Jenkins接口自动化测试框架

一:简介 大致思路&#xff1a;Jmeter可以做接口测试&#xff0c;也能做压力测试&#xff0c;而且是开源软件&#xff1b;Ant是基于Java的构建工具&#xff0c;完成脚本执行并收集结果生成报告&#xff0c;可以跨平台&#xff0c;Jenkins是持续集成工具。将这三者结合起来可以搭…

Hive+Spark离线数仓工业项目实战--环境构建(3)

项目环境配置 根据需求实现项目环境配置 实施 - 注意&#xff1a;所有软件Docker、Hadoop、Hive、Spark、Sqoop都已经装好&#xff0c;不需要额外安装配置&#xff0c;启动即可 配置网络&#xff1a;如果你的VM Nat网络不是88网段&#xff0c;请按照以下修改 - 修改Linux虚拟…

数据改版 | CnOpenData中国工业企业基本信息扩展数据

CnOpenData中国工业企业基本信息扩展数据 一、数据简介 拉动中国经济的三个产业中&#xff0c;工业企业占有特殊的地位&#xff0c;是推动国内经济发展的重要产业。工业是最主要的物质生产部门&#xff0c;为居民生活、各行业的经济活动提供物质产品&#xff0c;这一重要作用是…