使用 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位数字。 不过开发者要注意,必须要在验证成功后失效那个验证码,不然就会导致重放攻击。 对于邮箱验证码,服务器…...
西门子S7-300 PLC实战:从零搭建药品装瓶机控制系统(附组态王6.55配置)
西门子S7-300 PLC实战:从零搭建药品装瓶机控制系统(附组态王6.55配置) 在制药生产线上,药品装瓶环节的效率直接影响整体产能。传统人工装瓶方式不仅速度慢,还容易产生计数误差。而采用PLC控制的自动化装瓶系统&#x…...
DeepSeek-R1-Distill-Qwen-7B优化升级:提升推理速度的技巧
DeepSeek-R1-Distill-Qwen-7B优化升级:提升推理速度的技巧 1. 模型概述 DeepSeek-R1-Distill-Qwen-7B是基于Qwen架构的7B参数蒸馏模型,由DeepSeek团队开发。该模型通过知识蒸馏技术从更大的DeepSeek-R1模型中提取关键知识,在保持较高推理能…...
系统架构设计师常见高频考点总结之计算机网络
学习这些网络题目时,可以将网络层次结构想象成高速公路系统:核心层是连接城市的大型立交桥和主干道,追求极速转发;汇聚层是出口闸机,负责检查通行证(安全过滤)和分流;而接入层则是通…...
避坑指南:在K210上跑人脸68关键点,这些细节让你的疲劳检测更准
K210人脸疲劳检测实战:68关键点调优与工程化避坑指南 当你在车载监控或工业安全场景部署基于K210的疲劳检测系统时,是否遇到过这些情况?明明按照开源代码跑通了68关键点检测,但实际场景中闭眼判断总是不准;白天阳光直射…...
RVC与FunASR联动:中文语音识别+AI翻唱端到端流水线
RVC与FunASR联动:中文语音识别AI翻唱端到端流水线 1. 引言:当AI翻唱遇见语音识别 想象一下这个场景:你有一段喜欢的歌曲音频,想用自己的声音翻唱它,但苦于记不住歌词,或者原唱语速太快跟不上。传统的做法…...
Cogito v1预览版3B模型实战体验:超越Llama/DeepSeek的混合推理能力
Cogito v1预览版3B模型实战体验:超越Llama/DeepSeek的混合推理能力 1. 模型概览与核心优势 1.1 什么是Cogito v1预览版 Cogito v1预览版是Deep Cogito推出的混合推理模型系列,这个3B参数的版本在多项基准测试中表现优异。与传统的语言模型不同&#x…...
为什么92%的Java团队TCC失败?阿里P8级专家复盘6大反模式与可立即上线的加固模板
第一章:为什么92%的Java团队TCC失败?阿里P8级专家复盘6大反模式与可立即上线的加固模板TCC(Try-Confirm-Cancel)作为分布式事务的经典模式,在高并发、多服务协同场景中本应提供强一致性保障,但阿里内部审计…...
AI人脸隐私卫士快速部署指南:3步启动WebUI界面,开箱即用
AI人脸隐私卫士快速部署指南:3步启动WebUI界面,开箱即用 1. 引言:你的隐私,需要一道智能防线 你有没有过这样的困扰?公司团建拍了张大合照,想发朋友圈分享喜悦,却担心照片里同事们的隐私&…...
Godep依赖自动发现机制:Go项目依赖管理的终极指南
Godep依赖自动发现机制:Go项目依赖管理的终极指南 【免费下载链接】godep dependency tool for go 项目地址: https://gitcode.com/gh_mirrors/go/godep Godep作为Go语言早期经典的依赖管理工具,通过自动发现与追踪项目依赖,为Go开发者…...
Qwen3.5-2B图文理解评测:在TextVQA、ChartQA等基准测试中的轻量级SOTA表现
Qwen3.5-2B图文理解评测:在TextVQA、ChartQA等基准测试中的轻量级SOTA表现 1. 模型概览 Qwen3.5-2B是Qwen3.5系列中的轻量化多模态基础模型,仅有20亿参数规模,却展现出超越参数量的强大图文理解能力。该模型专为低功耗、低门槛部署场景设计…...
