使用 OpenCV 的 inRange 函数进行颜色分割
使用 OpenCV 的 inRange 函数进行颜色分割
在图像处理领域,颜色分割是一个常见的任务,常用于识别和提取图像中的特定颜色区域。OpenCV 提供了一个非常方便的函数 inRange 来实现这一功能。在这篇博客中,我们将详细介绍 inRange 函数的用法,并通过示例代码演示如何使用它来分割图像中的颜色。
inRange 函数介绍
inRange 是 OpenCV 库中的一个函数,用于检查图像像素值是否在指定的范围内,并生成一个二值图像。这个函数常用于颜色分割和阈值处理。
函数原型
void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst);
参数说明
- src: 输入图像。这个图像可以是单通道(灰度图像)或多通道(彩色图像)。函数将对该图像进行处理。
- lowerb: 低阈值或下界。与
src图像具有相同的类型和通道数,用于指定每个通道的下限值。 - upperb: 高阈值或上界。与
src图像具有相同的类型和通道数,用于指定每个通道的上限值。 - dst: 输出图像。这个图像是一个单通道的二值图像,尺寸和
src相同。像素值为 255(满足条件)或 0(不满足条件)。
函数描述
inRange 函数通过检查 src 图像的每个像素值是否在 lowerb 和 upperb 范围内,如果在范围内,则将对应位置的像素值设置为 255,否则设置为 0。结果保存在 dst 图像中。
示例代码
假设你有一个彩色图像 src,你想找到图像中绿色的部分,可以使用以下代码:
#include <opencv2/opencv.hpp>int main() {// 读取输入图像cv::Mat src = cv::imread("path_to_image.jpg");if (src.empty()) {std::cout << "Could not open or find the image" << std::endl;return -1;}// 将图像从 BGR 颜色空间转换为 HSV 颜色空间cv::Mat src_hsv;cv::cvtColor(src, src_hsv, cv::COLOR_BGR2HSV);// 定义绿色的HSV范围cv::Scalar lowerb(35, 100, 100); // 绿色的下界(H, S, V)cv::Scalar upperb(85, 255, 255); // 绿色的上界(H, S, V)// 应用inRange函数cv::Mat mask;cv::inRange(src_hsv, lowerb, upperb, mask);// 显示结果cv::imshow("Original Image", src);cv::imshow("Mask", mask);cv::waitKey(0);return 0;
}
示例代码解析
-
读取输入图像:
cv::Mat src = cv::imread("path_to_image.jpg");首先,我们使用
cv::imread函数读取图像,并检查图像是否成功读取。 -
转换颜色空间:
cv::Mat src_hsv; cv::cvtColor(src, src_hsv, cv::COLOR_BGR2HSV);由于颜色分割通常在 HSV 颜色空间中效果更好,我们将图像从 BGR 颜色空间转换为 HSV 颜色空间。
-
定义颜色范围:
cv::Scalar lowerb(35, 100, 100); // 绿色的下界(H, S, V) cv::Scalar upperb(85, 255, 255); // 绿色的上界(H, S, V)我们定义绿色的 HSV 范围,通过调整这两个值,可以检测不同的颜色。
-
应用
inRange函数:cv::Mat mask; cv::inRange(src_hsv, lowerb, upperb, mask);使用
inRange函数,我们生成一个二值图像mask,其中绿色部分的像素值为 255,其他部分为 0。 -
显示结果:
cv::imshow("Original Image", src); cv::imshow("Mask", mask);最后,我们使用
cv::imshow函数显示原始图像和结果二值图像。
注意事项
- 输入图像
src和下界lowerb以及上界upperb必须具有相同的通道数。如果src是三通道的彩色图像,那么lowerb和upperb也应该是三通道的。 dst是一个单通道的二值图像,只有两种可能的像素值:0 和 255。
用法场景
- 颜色分割:可以根据颜色范围分割图像中的特定颜色区域。
- 阈值处理:将图像中的像素值在某个范围内的部分提取出来。
- 物体检测:检测图像中具有特定颜色的物体。
通过 inRange 函数,我们可以方便地进行颜色分割,提取图像中的特定颜色区域,从而为后续的图像处理和分析打下基础。希望这篇博客对你理解和使用 inRange 函数有所帮助。
相关文章:
使用 OpenCV 的 inRange 函数进行颜色分割
使用 OpenCV 的 inRange 函数进行颜色分割 在图像处理领域,颜色分割是一个常见的任务,常用于识别和提取图像中的特定颜色区域。OpenCV 提供了一个非常方便的函数 inRange 来实现这一功能。在这篇博客中,我们将详细介绍 inRange 函数的用法&a…...
OpenAI终止对中国提供API服务,对国内AI市场产生重大冲击?
6月25日,OpenAI突然宣布终止向包括中国在内的国家地区提供API服务,本月9日这一政策已经正式生效了! 有人说,这个事件给中国AI行业带来很大冲击!是这样吗?在展开讨论前,我们先来看看什么是API服务…...
JavaDS —— 栈 Stack 和 队列 Queue
栈的概念 栈是一种先进后出的线性表,只允许在固定的一端进行插入和删除操作。 进行插入和删除操作的一端被称为栈顶,另一端被称为栈底 栈的插入操作叫做进栈/压栈/入栈 栈的删除操作叫做出栈 现实生活中栈的例子: 栈的模拟实现 下面是Jav…...
C++进阶:继承和多态
文章目录 ❤️继承🩷继承与友元🧡继承和静态成员💛菱形继承及菱形虚拟继承💚继承和组合 ❤️多态🩷什么是多态?🧡多态的定义以及实现💛虚函数💚虚函数的重写💙…...
【八大排序】java版(上)(冒泡、快排、堆排、选择排序)
文章目录 一、冒泡排序(重点)思路代码 二、快排(面试重点)思路代码 三、堆排序(面试重点)思路代码 四、选择排序思路代码 一、冒泡排序(重点) 思路 前后两两数据进行比较,小的数据往前走,大的数据往后走,每一轮结束之后,最大的数…...
.Net Core 微服务之Consul(二)-集群搭建
引言: 集合上一期.Net Core 微服务之Consul(一)(.Net Core 微服务之Consul(一)-CSDN博客) 。 目录 一、 Consul集群搭建 1. 高可用 1.1 高可用性概念 1.2 高可用集群的基本原理 1.3 高可用集群的架构设计 1.3.1 主从复制架构 1.3.2 共享存储架构 1.3.3 负载均衡…...
C++ --> 类和对象(二)
前言 在前面简单的介绍了OOP,什么是类,在类中的this指针。接下来就深入理解类和对象。 默认成员函数 默认构造函数:用于在创建对象时初始化对象的成员变量。默认拷贝构造函数:用于使用已存在的对象来初始化新创建的对象。默认析构…...
利用宝塔安装一套linux开发环境
更新yum,并且更换阿里镜像源 删除yum文件 cd /etc/yum.repos.d/ 进入yum核心目录 ls sun.repo rm -rf * 删除之前配置的本地源 ls 配置阿里镜像源 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo 配置扩展包 wge…...
VB 实例:掌握 Visual Basic 编程的精髓
VB 实例:掌握 Visual Basic 编程的精髓 引言 Visual Basic(简称VB)是一种由微软开发的高级编程语言,它结合了易于使用的界面和强大的编程功能,使得初学者和专业人士都能快速开发Windows桌面应用程序。本文将通过一系列实例,深入探讨VB编程的基础知识和高级技巧,帮助读…...
层次分析法:matlab代码实现
计算权重: 一、算术平均法 关于矩阵: 1、矩阵的输入写法 [ ; ; ]同行用空格或逗号隔开,不同行用分号间隔 2、矩阵求和 默认按列求和 asum(E) 等同于 asum(E,1) 得到行向量 按行求和 asum(E,2) 得到列向量 对整个矩阵求和 asum(E,"all&…...
07-7.5.3 处理冲突的方法
👋 Hi, I’m Beast Cheng 👀 I’m interested in photography, hiking, landscape… 🌱 I’m currently learning python, javascript, kotlin… 📫 How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…...
几何距离与函数距离:解锁数据空间中的奥秘
几何距离:直观的空间度量 几何距离,顾名思义,是我们在几何学中熟悉的距离概念,如欧几里得距离、曼哈顿距离和切比雪夫距离等。这些距离度量直接反映了数据点在多维空间中的位置关系。 欧几里得距离:最为人熟知的几何距…...
LabVIEW的Actor Framework (AF) 结构介绍
LabVIEW的Actor Framework (AF) 是一种高级架构,用于开发并发、可扩展和模块化的应用程序。通过面向对象编程(OOP)和消息传递机制,AF结构实现了高效的任务管理和数据处理。其主要特点包括并发执行、动态可扩展性和强大的错误处理能…...
gitlab 搭建使用
1. 硬件要求 ##CPU 4 核心500用户 8 核心1000用户 ##内存 4 G内存500用户 8 G内存1000用户 2. 下载 链接 3. 安装依赖 yum -y install curl openssh-server postfix wget 4. 安装gitlab组件 yum -y localinstall gitlab-ce-15.9.3-ce.0.el7.x86_64.rpm 5. 修改配置文…...
探索JT808协议在车辆远程视频监控系统中的应用
一、部标JT808协议概述 随着物联网技术的迅猛发展,智能交通系统(ITS)已成为现代交通领域的重要组成部分。其中,车辆远程监控与管理技术作为ITS的核心技术之一,对于提升交通管理效率、保障道路安全具有重要意义。 JT8…...
视频使用操作说明书-T80005系列视频编码器如何对接海康NVR硬盘录像机,包括T80005系列高清HDMI编码器、4K超高清HDMI编码器
视频使用操作说明书-T80005系列视频编码器如何对接海康NVR硬盘录像机,包括T80005系列高清HDMI编码器、4K超高清HDMI编码器。 视频使用操作说明书-T80005系列视频编码器如何对接海康NVR硬盘录像机,包括T80005系列高清HDMI编码器、4K超高清HDMI编码器 同三…...
keep-alive缓存组件
keep-alive缓存组件是Vue.js中的一个特殊组件,主要用于缓存内部组件的数据状态,以提高应用的性能和用户体验。以下是关于keep-alive缓存组件的详细解析: 一、作用 缓存组件状态:当组件在<keep-alive>内部切换时࿰…...
Linux上如何安装ffmpeg视频处理软件
在Linux上安装ffmpeg需要以下步骤: 更新系统 在开始安装之前,首先需要更新系统以获取最新的软件包列表和版本。在终端中执行以下命令: sudo apt update sudo apt upgrade安装依赖库 ffmpeg依赖于一些库和工具,需要先安装它们。在…...
element如何实现自定义表头?
有时候我们需要实现自定义表头,例如表头里加按钮啥的,这时候就需要用到自定义表头,但是官方对自定义表头的使用写的还是比较简单,今天就来详细说说 在需要使用自定义表头的表头上使用:render-header来启用自定义表头: <el-table-column :render-header="button&…...
OTP防重放攻击
OTP本意是一次性口令,比如邮箱验证码,短信验证码,或者根据totp或者hotp生成的默认30秒一变的6位数字。 不过开发者要注意,必须要在验证成功后失效那个验证码,不然就会导致重放攻击。 对于邮箱验证码,服务器…...
《CVPR2025-DEIM创新改进项目实战:从原理到部署的深度学习优化全攻略》018、DeepLab-DEIM与SegFormer-DEIM语义分割优化全记录
CVPR2025-DEIM创新改进项目实战:DeepLab-DEIM与SegFormer-DEIM语义分割优化全记录 一、从一次令人崩溃的显存溢出说起 上周三凌晨两点,我盯着屏幕上那个“CUDA out of memory”的红色报错,差点把咖啡泼到键盘上。当时正在跑一个DeepLabV3+的语义分割实验,输入尺寸不过是1…...
BabelDOC终极指南:5个技巧让你的PDF翻译又快又好
BabelDOC终极指南:5个技巧让你的PDF翻译又快又好 【免费下载链接】BabelDOC Yet Another Document Translator 项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC 还在为PDF翻译后格式错乱、公式丢失而烦恼吗?作为一款专业的智能PDF翻译…...
随身移动文件工作站 金士顿高速移动固态系列
当下移动办公已成为职场人的常态,无论是商务会谈时给客户演示视频、设计文件,还是户外创作时调取海量素材,亦或是日常通勤中处理微信接收的各类文件,都离不开高效的文件存储与传输支持。但现实中的痛点却屡屡困扰着大家࿱…...
网络编程入门 Python Socket 实现一个简单的用户认证系统
# Python Socket 实现一个简单的用户认证系统这次写的是一个简单的用户认证系统。整体思路是:1. 服务端负责保存和校验用户名、密码 2. 客户端负责输入用户名、密码 3. 客户端把用户输入的数据发送给服务端 4. 服务端判断用户名和密码是否正确 5. 服务端把登录结果返…...
Windows和Office激活终极指南:KMS_VL_ALL_AIO一键解决方案
Windows和Office激活终极指南:KMS_VL_ALL_AIO一键解决方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows和Office的激活问题烦恼吗?每次重装系统都要重新…...
观察Taotoken用量看板如何帮助控制月度API支出
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察Taotoken用量看板如何帮助控制月度API支出 在项目开发中,大模型API的调用成本往往是预算管理的重要一环。如果缺乏…...
限时开放!ElevenLabs未公开东北话语音微调接口文档(含token绕过+方言embedding注入完整POC)
更多请点击: https://codechina.net 第一章:ElevenLabs东北话语音微调接口的发现与边界定义 ElevenLabs 官方 API 文档未显式标注“东北话”支持,但通过其语音克隆(Voice Cloning)与声音微调(Fine-tuning&…...
ElevenLabs湖北话语音合成:从零部署到商用级TTS的7大避坑步骤(附武汉/宜昌/襄阳三方言测试数据)
更多请点击: https://kaifayun.com 第一章:ElevenLabs湖北话语音合成的技术定位与方言价值 ElevenLabs 作为全球领先的AI语音生成平台,其核心能力聚焦于高保真、情感化、多语言的文本到语音(TTS)合成。尽管官方尚未正…...
快速上手Notepad2-mod:5个步骤打造你的专属轻量级代码编辑器
快速上手Notepad2-mod:5个步骤打造你的专属轻量级代码编辑器 【免费下载链接】notepad2-mod LOOKING FOR DEVELOPERS - Notepad2-mod, a Notepad2 fork, a fast and light-weight Notepad-like text editor with syntax highlighting 项目地址: https://gitcode.c…...
【独家首发】ElevenLabs未公开的粤语语音增强技巧:3个隐藏prompt指令+2个音频后处理脚本
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs广东话语音合成的技术边界与本地化挑战 ElevenLabs 作为全球领先的语音合成平台,其多语言支持能力广受关注,但粤语(广东话)尚未被官方列为正式…...
