OpenCV学习(4.1) 改变颜色空间

1.目标

  • 在本教程中,你将学习如何将图像从一个色彩空间转换到另一个,像BGR↔灰色,BGR↔HSV等
  • 除此之外,我们还将创建一个应用程序,以提取视频中的彩色对象
  • 你将学习以下功能:cv2.cvtColor,**cv2.inRange**等。

2.改变颜色空间

在 OpenCV 中有超过 150 种颜色空间转换的方法。但我们仅需要研究两个最常使用的方法,他们是 BGR 到 Gray,BGR 到 HSV。

我们使用 cv2.cvtColor(input_image, flag)函数进行颜色转换,其中 flag 决定了转换的类型。

对于 BGR 到 Gray 转换我们令 flag 为 **cv2.COLOR_BGR2GRAY**。 同样,对于 BGR 到 HSV, 我们令 flag 为 **cv2.COLOR_BGR2HSV**。

代码:

import cv2


image = r'D:\study\EmotionDetection_RealTime-master\data\data\te\01.jpg'
image = cv2.imread(image)

#颜色转换
img1 = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
img2 = cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
cv2.imshow('s',image)
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)

cv2.waitKey(0)
cv2.destroyAllWindows()

注意 对于 HSV, 色调(Hue)范围为 [0,179], 饱和度(Saturation)范围为 [0,255] ,明亮度(Value)为 [0,255]. 不同的软件使用不同的比例. 所以如果你想用 OpenCV 的值与别的软件的值作对比,你需要归一化这些范围。

结果输出:

3.目标颜色区域提取

现在我们知道了如何将 BGR 图片转化为 HSV 图片,我们可以使用它去提取彩色对象。HSV 比 BGR 在颜色空间上更容易表示颜色。在我们的应用中,我们会尝试提取一个感兴趣的彩色对象,方法为:

  • 将 BGR 转化为 HSV 颜色空间。
  • 点击图像对应区域获得HSV值
  • 获取感兴趣的彩色区域

代码:

import cv2
import numpy as np


image = r'D:\study\EmotionDetection_RealTime-master\data\data\te\03.jpg'
# image = cv2.imread(image)

import cv2
import numpy as np
from matplotlib import pyplot as plt

image=cv2.imread(image)
HSV=cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
def getpos(event,x,y,flags,param):
    if event==cv2.EVENT_LBUTTONDOWN: #定义一个鼠标左键按下去的事件
        print(HSV[y,x])

cv2.imshow("imageHSV",HSV)
cv2.imshow('image',image)
cv2.setMouseCallback("imageHSV",getpos)
cv2.waitKey(0)

lower_blue = np.array([0, 0, 190])
upper_blue = np.array([180, 200, 255])
# Threshold the HSV image to get only blue colors
mask = cv2.inRange(HSV, lower_blue, upper_blue)
cv2.imshow('mask',mask)


cv2.waitKey(0)
cv2.destroyAllWindows()

输出:

 

 HSV=cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
def getpos(event,x,y,flags,param):
    if event==cv2.EVENT_LBUTTONDOWN: #定义一个鼠标左键按下去的事件
        print(HSV[y,x])

您提供的代码片段是使用OpenCV库(通常以cv2导入)来处理图像的一部分。这段代码的作用是将图像从BGR颜色空间转换到HSV颜色空间,并且定义了一个鼠标事件处理函数,当用户在图像上左键点击时,它会打印出点击位置像素的HSV值。

下面是这段代码的详细解释:

  1. HSV=cv2.cvtColor(image,cv2.COLOR_BGR2HSV):这行代码将输入的image(应该是BGR格式的numpy数组)转换为HSV颜色空间。OpenCV默认读取图像为BGR格式,而HSV颜色空间对于某些图像处理任务(如颜色分割)更加方便。

  2. def getpos(event,x,y,flags,param)::这定义了一个名为getpos的函数,它将作为回调函数用于处理OpenCV窗口中的鼠标事件。这个函数接收五个参数:event(事件类型),xy(鼠标点击的坐标),flags(其他参数),param(用户定义的参数)。

  3. if event==cv2.EVENT_LBUTTONDOWN::这行代码检查event参数是否为cv2.EVENT_LBUTTONDOWN,即鼠标左键是否被按下。

  4. print(HSV[y,x]):如果在图像上发生了鼠标左键点击事件,这行代码会打印出鼠标点击位置像素的HSV值。这里HSV[y,x]访问的是转换到HSV颜色空间后的图像数组,在(x,y)位置的像素值。

lower_blue = np.array([0, 0, 190])
upper_blue = np.array([180, 200, 255])
# Threshold the HSV image to get only blue colors
mask = cv2.inRange(HSV, lower_blue, upper_blue)
cv2.imshow('mask',mask)

您提供的代码片段是使用OpenCV库来创建一个蓝色颜色范围的掩码(mask),并将这个掩码显示在窗口中。这段代码是在HSV颜色空间中操作的,这是进行颜色识别和分割的常用方法。

下面是这段代码的详细解释:

  1. lower_blue = np.array([0, 0, 190]):这行代码定义了蓝色在HSV颜色空间中的低阈值。这里,蓝色的色调(H)从0开始,饱和度(S)从0开始,亮度(V)从190开始。这意味着,亮度高于190的非常浅的蓝色将被排除在外。

  2. upper_blue = np.array([180, 200, 255]):这行代码定义了蓝色在HSV颜色空间中的高阈值。色调(H)的上限是180(在HSV颜色空间中,蓝色的范围是从0到180,然后再次从180到0,所以这里包括了所有的蓝色),饱和度(S)的上限是200,亮度(V)的上限是255(最大值)。

  3. mask = cv2.inRange(HSV, lower_blue, upper_blue):这行代码使用cv2.inRange函数创建了一个掩码,这个掩码包含了输入图像HSV中所有在lower_blueupper_blue阈值范围内的像素。在掩码中,这些像素被设置为白色(255),而不在阈值范围内的像素被设置为黑色(0)。

  4. cv2.imshow('mask',mask):这行代码显示了创建的掩码。在显示的窗口中,白色的区域代表了图像中蓝色的部分,黑色的区域则代表其他颜色。

要使这段代码完整工作,您需要确保已经读取了图像并将其转换为HSV颜色空间,如之前提供的代码示例所示。然后,这段代码将创建并显示蓝色物体的掩码。

提取结果:

 这在 stackoverflow.com 中是经常见到的问题。 这个问题非常简单,你可以使用相同的函数:**cv.cvtColor()**。 不需要输入图片,你只需要输入你需要的 BGR 值即可. 例如, 为了找到绿色的 HSV 值, 可以在 Python 终端中输入以下代码:

>>> green = np.uint8([[[0,255,0 ]]])
>>> hsv_green = cv.cvtColor(green,cv.COLOR_BGR2HSV)
>>> print( hsv_green )
[[[ 60 255 255]]]

现在你可以取 [H-10, 100,100] 和 [H+10, 255, 255] 分别作为上界和下界. 除此之外,你可以使用任何图像编辑工具(如 GIMP)或任何在线转换器来查找这些值,但不要忘记调整 HSV 范围。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在 Visual Studio 2022 中配置 OpenCV

在 Visual Studio 2022 中配置 OpenCV 软件准备系统环境配置VS 2022 环境配置测试 软件准备 Visual Studio 2022 下载链接 OpenCV 下载链接 Visual Studio 的版本与 OpenCV 的 vc 版本需对应好,可以向下兼容: VS 2015 – vc14VS 2017 – vc15VS 2019…

测试开发面经分享,面试七天速成

1. get、post、put、delete的区别 a. get请求: i. 用于从服务器获取资源。请求参数附加在URL的查询字符串中。 ii. 对服务器的请求是幂等的,即多次相同的GET请求应该返回相同的结果。 iii. 可以被缓存,可以被收藏为书签。 iv. 对于敏感数据不…

AI大模型-LangChain基础知识入门

1 什么是LangChain LangChain由 Harrison Chase 创建于2022年10月,它是围绕LLMs(大语言模型)建立的一个框架,LLMs使用机器学习算法和海量数据来分析和理解自然语言,GPT3.5、GPT4是LLMs最先进的代表,国内百度…

kubernetes(k8s)集群部署(2)

目录 k8s集群类型 k8s集群规划: 1.基础环境准备: (1)保证可以连接外网 (2)关闭禁用防火墙和selinux (3)同步阿里云服务器时间(达到集群之间时间同步) &…

AXI 1G/2.5G Ethernet Subsystem IP核使用过程中参数配置全解

AXI 1G/2.5G Ethernet Subsystem 是一个为FPGA设计的以太网子系统,它支持1Gbps和2.5Gbps的数据传输速率,使得FPGA能够直接进行高速以太网通信。这个子系统通常包含以太网MAC控制器、GMII(千兆媒体独立接口)或RGMII(简化…

[word] 怎么给word文档加密? #微信#笔记#微信

怎么给word文档加密? 怎么给word文档加密?工作中,需要对公司的机密文件加密处理,防止信息泄露,这些是基本的操作,保护文档的安全。相信还有不少伙伴不知道怎么样去设置,今天小Q给大家分享设置文…

喜讯 | 爱洁丽攸信技术uMOM制造运营系统项目启动会圆满成功!

2024年6月4日,厦门攸信信息技术有限公司(以下简称“攸信技术”)与福建爱洁丽日化有限公司(以下简称“爱洁丽”)uMOM制造运营系统项目启动会圆满成功 01合作客户介绍 Introduction of cooperative customers 福建爱洁…

天锐绿盾 |-设计、制造、研发部门核心文件资料、图档、源代码等数据防泄密系统

#天锐绿盾防泄密软件# 天锐绿盾是一款专为企业设计、制造、研发等部门定制的数据防泄密解决方案。它集成了多种安全技术和管理策略,旨在全方位保护企业的核心文件资料、设计图纸、图档以及软件源代码等敏感数据,防止数据泄露。 PC地址: htt…

Interview preparation--RabbitMQ

AMQP AMQP(Advanced Message Queueing protocol). 高级消息队列协议,是进程之间床底一步新消息的网络协议AMQP工作原理如下: 发布者(Publisher)发布消息(Message)经过交换机(Exchange&#xff…

git服务器gitblit安装

1、下载 Gitblit 2、下载完后解压: 3、配制: 保存,退出编辑。 4、运行cmd,启用gitblit。 5、根据运行后的提示,也就是我们之间设置的port9990打开: 输入admin,admin就可以登录,这个账号密码&a…

数据可视化如何提升智慧展厅的展示效果

数据可视化是如何在智慧展厅中发挥作用的?随着科技的进步,智慧展厅成为展示信息、互动体验和传递品牌价值的前沿平台。数据可视化作为智慧展厅的重要组成部分,通过将复杂的数据转化为直观的图形、图表和互动界面,极大地提升了展厅…

GitHub工程获取第三方PR操作

GitHub工程获取第三方PR操作 1. 源由2. 获取第三方PRStep 1:安装ghStep 2:获取个人TokenStep 3:通过git协议获取代码Step 4:获取第三方PR分支 3. 总结 1. 源由 通常来说,GitHub上通常有三种场景: 工程管理…

PlantSimulation导入cad图作为背景

PlantSimulation导入cad图作为背景 首先要整理cad文件,正常的工艺规划总图中存在较多杂乱文件,这些信息是不需要的,如果直接导入,会非常卡。 1、打开cad软件,使用layon命令打开所有的隐藏图层,删除不需要…

kubeadm快速部署K8S

目录 一、kubeadm安装K8S 1.1 环境准备 1.2 初始化配置 1.3 所有节点安装docker 1.3.1 安装依赖环境和docker 1.3.2 定义docker 配置文件 1.3.3 重启并开机自启docker 1.3.4 查看docker 是否配置成功 1.4 master、node01 、node02安装kubeadm,kubelet和kub…

【机器学习300问】110、什么是Lasso回归模型?

LASSO回归的全称是Least Absolute Shrinkage and Selection Operator,中文叫“最小绝对收缩和选择算子”,用一个比喻来初步感受一下它的作用: 想象你在整理一个杂乱无章的房间,里面堆满了各种物品(代表众多的预测变量&…

「动态规划」如何求粉刷房子的最少花费?

LCR 091. 粉刷房子https://leetcode.cn/problems/JEj789/description/ 假如有一排房子,共n个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。当然,因为市…

应急加固-网站入侵后应急流程

实验需求: bugku的在线实验平台,找到黑客入侵的方式,并确定黑客入侵的ip地址、首次webshell的密码、找到webshell并删除、找到黑客留下的后门中黑客服务器的ip及端口、删除定时任务和脚本、找到黑客添加的账号并删除、修复mysql的getshell漏…

远程咨询的好处都有哪些呢?

随着科技的飞速发展,远程咨询正逐渐成为人们获取医疗服务的一种新方式。那么什么是远程咨询呢?其又有哪些好处呢?下面就给大家详细地说说。 远程咨询的概念 远程咨询,顾名思义,是指通过互联网技术,实现患…

网络安全技术实验一 信息收集和漏洞扫描

一、实验目的和要求 了解信息搜集和漏洞扫描的一般步骤,利用Nmap等工具进行信息搜集并进行综合分析;掌握TCP全连接扫描、TCP SYN扫描的原理,利用Scapy编写网络应用程序,开发端口扫描功能模块;使用漏洞扫描工具发现漏洞并进行渗透测…

Java使用XWPFTemplate将word填充数据,并转pdf

poi-tl poi-tl&#xff08;poi template language&#xff09;是基于Apache POI的Word模板引擎。纯Java组件&#xff0c;跨平台&#xff0c;代码短小精悍&#xff0c;通过插件机制使其具有高度扩展性。 主要处理区域有这么几个模块: 依赖 <dependency><groupId>…