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

OpenCv更改颜色空间以及图像阈值

本文主要讲解以下几个方面:
  • 如何将图片从一个颜色空间转换到另一个,例如 BGR 到 Gray,BGR 到 HSV 等。
  • 简单阈值法
  • 另外,我们会创建一个从图片中提取彩色对象的应用。
1.改变颜色空间

cv.cvtColor(img, flag)

  • 参数flag表示颜色空间转换的方法,常用的方法为BGR -> GRAY以及BGR -> HSV这两种图像空间转换的方法其flag对应的指令分别为cv.COLOR_BGR2GRAYcv.COLOR_BGR2HSV

如果想查看其它flag属性的话可以在python终端输入如下代码执行,如图所示(部分)

import cv2
flags = [i for i in dir(cv2) if i.startsWith('COLOR_')]
print(flags)

在这里插入图片描述

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

2. 图像的阈值操作

cv.threshold(src, thresh, maxval, type)函数

  • src 阈值处理的图像文件 它应该是灰度图像
  • thresh 界限值, 用于对像素值进行分类
  • maxval 它表示像素值大于(有时小于)阈值时要给定的值
  • type不同阈值类型

type主要使用以下几种:

cv.THRESH_BINARY
cv.THRESH_BINARY_INV
cv.THRESH_TRUNC
cv.THRESH_TOZERO
cv.THRESH_TOZERO_INV

其他的可以前往官方文档中查看传送门

  1. 简单阈值法
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread('gradient.png',0)
ret,thresh1 = cv.threshold(img,127,255,cv.THRESH_BINARY)
ret,thresh2 = cv.threshold(img,127,255,cv.THRESH_BINARY_INV)
ret,thresh3 = cv.threshold(img,127,255,cv.THRESH_TRUNC)
ret,thresh4 = cv.threshold(img,127,255,cv.THRESH_TOZERO)
ret,thresh5 = cv.threshold(img,127,255,cv.THRESH_TOZERO_INV)
titles = ['Original Image','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]
for i in xrange(6):plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')plt.title(titles[i])plt.xticks([]),plt.yticks([])
plt.show()

在这里插入图片描述
其他阈值法请查看文档
https://opencv.apachecn.org/#/docs/4.0.0/4.3-tutorial_py_thresholding

3. 提取图片中的色彩

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

track = cv.imread('images/track.jpg')
# 将颜色空间由BGR转化为HSV
hsv = cv.cvtColor(track, cv.COLOR_BGR2HSV)
# 设置提取颜色的范围
lower_blue = np.array([100,50,50])
upper_blue = np.array([140,255,255])
# 将蓝色以外的颜色通过阈值处理
mask = cv.inRange(hsv, lower_blue, upper_blue)
# 将处理后的图像和原图像进行位-与运算
res = cv.bitwise_and(track,track, mask= mask)
ret = np.hstack((track, res))
cv.imshow('result', ret)
cv.waitKey(0)
cv.destroyAllWindows()

结果如图:在这里插入图片描述
参考:opencv4.0 中文文档以及英文文档
感谢阅读!!!

相关文章:

OpenCv更改颜色空间以及图像阈值

本文主要讲解以下几个方面: 如何将图片从一个颜色空间转换到另一个,例如 BGR 到 Gray,BGR 到 HSV 等。简单阈值法另外,我们会创建一个从图片中提取彩色对象的应用。 1.改变颜色空间 cv.cvtColor(img, flag) 参数flag表示颜色空间转换的方…...

(邱维声)高等代数课程笔记:基,维数与坐标

3.5 基,维数与坐标 \quad 本节,继续研究线性空间的结构。一般地,设 V V V 是数域 K K K 上的一个线性空间。 \quad 首先,我们先将“线性相关”与“线性无关”的概念由“有限”向“无限”推广。 对比其它高等代数教程&#xff0c…...

Spring Security + Jwt 集成实现登录

文章目录 前言Maven 相关依赖配置文件自定义springsecurity相关认证流程继承WebSecurityConfigurerAdapter继承AbstractAuthenticationToken继承AbstractAuthenticationProcessingFilter实现AuthenticationProvider实现UserDetailsService实现AccessDeniedHandler实现Authentic…...

yolov5 用自己的数据集进行训练

在训练之前先要按照一定目录格式准备数据: VOC标签格式转yolo格式并划分训练集和测试集_爱钓鱼的歪猴的博客-CSDN博客 目录 1、修改数据配置文件 2、修改模型配置文件 3、训练 1、修改数据配置文件 coco.yaml 拷贝data/scripts/coco.yaml文件, pa…...

1951-2023最新中国基础地理信息,包括水系、行政区、DEM高程、气象站经纬位置、土地利用,这些数据获取方法介绍

水系: 流域内所有河流、湖泊等各种水体组成的水网系统,称作水系。其中,水流最终流入海洋的称作外流水系,如太平洋水系、北冰洋水系;水流最终流入内陆湖泊或消失于荒漠之中的,称作内流水系。 [1] 流域面积的…...

CAD处理控件Aspose.CAD功能演示:在 C#中以编程方式搜索 DWG 图形文件中的文本

Aspose.CAD 是一个独立的类库,以加强 Java应用程序处理和渲染CAD图纸,而不需要AutoCAD或任何其他渲染工作流程。该CAD类库允许将DWG, DWT, DWF, DWFX, IFC, PLT, DGN, OB…...

实验二十、压控电压源二阶 LPF 幅频特性的研究

一、题目 研究压控电压源二阶低通滤波电路品质因数 Q Q Q 对频率特性的影响。 二、仿真电路 电路如图1所示。集成运放采用 LM324AJ,其电源电压为 15V。 图 1 压控电压源二阶低通滤波电路幅频特性的测试 图1\,\,压控电压源二阶低通滤波电路幅频特性的测试 图1压控…...

类和对象【C++】【中篇】

目录 一、类的6个默认成员函数 1、构造函数 2、析构函数 3、拷贝构造函数 4、赋值重载函数 二、赋值运算符重载 一、类的6个默认成员函数 注意:默认成员函数不能在类外面定义成全局函数。因为类里没有的话会自动生成,就会产生冲突。 1、构造函数…...

2.SpringBoot运维实用篇

SpringBoot运维实用篇 ​ 基础篇发布以后,看到了很多小伙伴在网上的留言,也帮助超过100位小伙伴解决了一些遇到的问题,并且已经发现了部分问题具有典型性,预计将有些问题在后面篇章的合适位置添加到本套课程中,作为解…...

【c++】浅讲引用

【c】浅讲引用 前言引用定义作用做输出型参数引用作返回值总结 关于引用的权限 结尾 前言 博主开始细学c和linux了 这次就带来浅学了的引用。 引用 定义 引用不是在内存中开辟一个新空间的新变量 类似于给变量取别名,和取别名的对象在空间中公用一个对象 例&#…...

CSS布局基础(文字[行内<块>]与行内[块]垂直对齐方式 文字溢出显示省略号)

文字[行内<块>]与行内[块]垂直对齐方式 文字[行内<块>]与行内[块]垂直对齐方式概述图片底部空隙问题 文字溢出显示省略号单行文字多行文字 文字[行内<块>]与行内[块]垂直对齐方式 概述 vertical-align: top | middle| bottom | baseline(默认) | sub | sup…...

AI自动写文章_免费在线原创文章生成器

自动写文章生成器 自动写文章生成器是一种利用人工智能和自然语言处理技术&#xff0c;帮助用户快速生成文章的工具。该软件可以根据用户的需求和选择&#xff0c;自动生成符合要求的文章&#xff0c;无需手动编写和修改。 自动写文章生成器的主要功能包括以下几个方面&#…...

Java阶段二Day15

Java阶段二Day15 文章目录 Java阶段二Day15复习前日知识点对象数据类型注入数组类型注入集合类型的注入p命名空间引入外部属性文件 基于XML管理beanbean的作用域bean的生命周期代码演示生命周期后置处理器处理展示基于XML的自动装配 基于注解管理bean开启组件扫描使用注解定义B…...

从月薪3000到月薪20000,自动化测试应该这样学...

绝大多数测试工程师都是从功能测试做起的&#xff0c;工作忙忙碌碌&#xff0c;每天在各种业务需求学习和点点中度过&#xff0c;过了好多年发现自己还只是一个功能测试工程师。 随着移动互联网的发展&#xff0c;从业人员能力的整体进步&#xff0c;软件测试需要具备的能力要…...

Python魔法方法 单例模式

前言 本文介绍一下python中常用的魔法方法以及面向对象中非常重要的单例模式。 魔法方法 python中一切皆对象&#xff0c;因为python是面向对象的编程语言。python给类和对象提供了大量的内置方法&#xff0c;这些内置方法也称魔法方法。这些魔法方法总是在某种条件下自动触…...

计算机网络基础知识(三)—— 什么是OSI七层模型?

文章目录 00 | &#x1f6f8;发展史&#x1f6f8;01 | &#x1f6f8;OSI七层参考模型&#x1f6f8;02 | &#x1f6f8;OSI七层参考模型的信息流向&#x1f6f8; OSI七层模型是Open Systems Interconnection Reference Model的缩写&#xff0c;是由国际标准化组织&#xff08;IS…...

Python(符号计算常微分方程)谐振子牛顿运动方程

牛顿运动方程 牛顿运动方程可以写成以下形式 F d p d t m d v d t m d 2 r d t 2 \mathbf{F}\frac{d \mathbf{p}}{d t}m \frac{d \mathbf{v}}{d t}m \frac{d^2 \mathbf{r}}{d t^2} Fdtdp​mdtdv​mdt2d2r​ 恒力问题 具有恒定力的问题意味着恒定的加速度。 典型的例子是…...

OpenCL编程指南-1.2OpenCL基本概念

OpenCL概念基础 面向异构平台的应用都必须完成以下步骤&#xff1a; 1&#xff09;发现构成异构系统的组件。 2&#xff09;探查这些组件的特征&#xff0c;使软件能够适应不同硬件单元的特定特性。 3&#xff09;创建将在平台上运行的指令块&#xff08;内核)。 4&#xff09…...

使用 ChatGPT 辅助学习——为自己找一个老师

我们每个人都有许多标签&#xff0c;例如高中生、成绩中等、文科&#xff0c;根据这些标签我和其他拥有相同标签的人分配了相同的教程、班级和老师&#xff0c;这可以带来效率上的提升&#xff0c;因为同一份教程、老师就可以服务几十上百人&#xff0c;而无须为每个人定制&…...

MySQL基础(二十一)用户与权限管理

1. 用户管理 1.1 登录MySQL服务器 启动MySQL服务后&#xff0c;可以通过mysql命令来登录MySQL服务器&#xff0c;命令如下&#xff1a; mysql –h hostname|hostIP –P port –u username –p DatabaseName –e "SQL语句"-h参数后面接主机名或者主机IP&#xff0c…...

Allegro等长设置翻车实录:拓扑模板法的3个坑与手工PinPair的救赎

Allegro等长设计避坑指南&#xff1a;从拓扑模板到精准PinPair的实战演进在高速PCB设计中&#xff0c;等长匹配如同精密钟表里的齿轮啮合&#xff0c;差之毫厘便可能导致整个系统时序崩塌。当设计从简单的点对点结构升级到多负载复杂拓扑时&#xff0c;Allegro用户常陷入两种典…...

告别虚频困扰:用VASP+DynaPhoPy搞定高温材料声子谱的保姆级教程

高温材料声子谱计算实战&#xff1a;从虚频困境到非谐解决方案 引言&#xff1a;虚频问题的根源与突破路径 在计算材料学领域&#xff0c;声子谱分析是理解材料动力学稳定性和热力学性质的核心手段。然而许多研究者都遭遇过这样的困境&#xff1a;对实验合成的材料进行简谐近似…...

对称与负电源测试:动态直流电子负载的设计、原理与应用

1. 项目概述&#xff1a;对称与负电源的静态与动态直流负载在电子实验室里&#xff0c;测试一个电源的性能&#xff0c;尤其是它的动态响应能力&#xff0c;是件既基础又关键的事。我们常说的“直流电子负载”就是这个领域的核心工具。我之前设计并分享过一个用于正电源测试的静…...

告别FTP龟速:用NTFS-3G在CentOS7上直连移动硬盘拷贝200G大文件

告别FTP龟速&#xff1a;用NTFS-3G在CentOS7上直连移动硬盘拷贝200G大文件当面对数百GB的设计素材、日志文件或数据库备份需要迁移时&#xff0c;传统的FTP传输往往会成为效率瓶颈。我曾在一个视频处理项目中&#xff0c;需要将230GB的4K原始素材从移动硬盘导入服务器&#xff…...

孤舟笔记 互联网常用框架篇二 Dubbo服务请求失败怎么处理?集群容错策略你用过几种

文章目录先说结论Failover&#xff1a;换家店试试Failfast&#xff1a;不行就算了Failsafe&#xff1a;忘了这事Failback&#xff1a;回头再说Forking&#xff1a;同时点几家Broadcast&#xff1a;通知所有人怎么选择回答技巧与点评加分回答面试官点评个人网站分布式系统中&…...

UE5 Mac环境搭好了,然后呢?给新手的第一个5分钟:创建、操控并理解你的第一个角色

UE5 Mac环境搭好了&#xff0c;然后呢&#xff1f;给新手的第一个5分钟&#xff1a;创建、操控并理解你的第一个角色当你第一次打开UE5的Mac版本&#xff0c;面对那个闪烁着光芒的启动界面&#xff0c;内心可能既兴奋又忐忑。安装只是第一步&#xff0c;真正的旅程现在才开始。…...

3大实战秘籍:揭秘raylib如何让游戏开发像搭积木一样简单

3大实战秘籍&#xff1a;揭秘raylib如何让游戏开发像搭积木一样简单 【免费下载链接】raylib A simple and easy-to-use library to enjoy videogames programming 项目地址: https://gitcode.com/GitHub_Trending/ra/raylib 你是否曾经被复杂的游戏引擎配置搞得焦头烂额…...

多智能体谈判系统:Agent 如何通过博弈达成最优交易价格?

多智能体谈判系统&#xff1a;Agent 如何通过博弈达成最优交易价格&#xff1f;关键词 多智能体系统、自动谈判、博弈论、纳什均衡、帕累托最优、双边/多边谈判、强化学习谈判、动态定价 摘要 想象一个没有人类中介的世界&#xff1a;电商平台上的智能客服自动和批发商砍价、供…...

WarcraftHelper终极指南:魔兽争霸3兼容性问题一站式解决方案

WarcraftHelper终极指南&#xff1a;魔兽争霸3兼容性问题一站式解决方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为《魔兽争霸3》在现代电…...

2026 文章代码高亮方案选型

将基于 Prism.js 或 Highlight.js 的传统高亮方案与基于 Shiki 的现代化高亮方案进行对比&#xff0c;其核心区别在于底层解析原理的不同&#xff08;正则表达式 vs. TextMate 语法树&#xff09;。 以下是两种方案的底层原理、各自优缺点、核心对比矩阵以及适用场景的详细分析…...