当前位置: 首页 > news >正文

OpenCV inRange 函数使用详解

        本文是 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])

 

相关文章:

  • 集团网站建设方案书/搜索引擎推广方法
  • wordpress url传参数/班级优化大师的功能
  • 网站建设技术标准/互联网网络推广公司
  • 如何做一网站首页/宁波seo深度优化平台
  • 所有网站大全/百度浏览器网址链接
  • wordpress 短信通知/永久免费个人网站注册
  • 倒角算法推导
  • 支持docker部署的开源网盘汇总
  • python index() 与 rindex() 方法的使用
  • Shell ❀ 基础知识概述
  • 汽车租赁服务小程序开发, 新时代下的行业商机
  • 使用 x-sheet 构建在线疫情高峰预测数据表
  • 智能制造数字化工厂的关键技术特点
  • linux加载动态库.so的3种方法
  • 使用DevEco Device Tool编译并烧录全部步骤和过程详解
  • 一个新工具引发IT巨变:程序员在转行,不懂编程的人却成了程序员
  • DBCO-PEG-FA二苯基环辛炔-聚乙二醇-叶酸;DBCO-PEG叶酸是一种无需任何催化剂即可进行化学反应的叶酸PEG衍生物
  • GAMES104-渲染中光和材质的数学魔法