OpenCV中inRange函数

在OpenCV中,inRange函数用于根据颜色范围从图像中提取特定的颜色区域。这个函数检查输入图像中的每个像素,如果像素值位于指定的范围内,则在输出图像(或掩码)中对应位置的像素被设置为白色(或者说是255),否则被设置为黑色(0)。这种方法在处理颜色过滤、颜色识别等任务时非常有用。

cpp 复制代码
void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst);

src :输入图像,通常是经过颜色空间转换后的图像,比如从BGR转换到HSV颜色空间的图像。
lowerb :颜色范围的下界,使用Scalar类型表示。
upperb :颜色范围的上界,使用Scalar类型表示。
dst:输出图像,是一个二值图像,其中符合颜色范围的像素被设置为255,不符合的被设置为0。

红绿蓝在HSV颜色空间中的范围

在HSV颜色空间中,颜色是通过色调(Hue)、饱和度(Saturation)和亮度(Value)来定义的。不同的颜色在HSV空间中占据不同的范围,这使得HSV成为图像处理中进行颜色分割和识别的一个非常实用的颜色空间。以下是红色、绿色和蓝色在HSV颜色空间中的大致范围:

红色(Red)

色调 (Hue):红色在HSV颜色圆环的两端,因此它的色调值分布在两个区域:0°到10°(接近360°的值也视为红色,因为360°等价于0°)和170°到180°。
饱和度 (Saturation):高饱和度值,大约从50%到100%。
亮度(Value):亮度范围可以很宽,从较暗(约50%)到非常亮(100%)。

绿色(Green)

色调 (Hue):绿色的色调值大约在35°到85°之间。
饱和度 (Saturation):高饱和度值,大约从50%到100%。
亮度(Value):亮度范围同样可以从较暗到非常亮。

蓝色(Blue)

色调 (Hue):蓝色的色调值大约在100°到140°之间。
饱和度 (Saturation):高饱和度值,通常从50%到100%。
亮度(Value):亮度同样可以从较暗到非常亮。

注意事项

这些范围是大致估计 ,实际应用中可能需要根据具体情况进行调整。不同的照明条件和图像质量都可能影响颜色的HSV值。

在实际应用中,经常需要通过实验 来确定最佳的HSV范围,以达到最好的颜色识别或分割效果。

特别是对于红色 ,因为它在HSV色环的两端,处理时可能需要分别考虑两个范围,并将结果合并。

示例1:提取绿色区域

假设有一个需求是从图像中提取绿色区域,首先需要将图像从BGR颜色空间转换到HSV颜色空间,因为HSV颜色空间更适合颜色分割:

cpp 复制代码
void QuickDemo::inrange_demo(Mat &image) {
	Mat hsv;
	cvtColor(image, hsv, COLOR_BGR2HSV);
	Mat mask;
	inRange(hsv, Scalar(35, 43, 46), Scalar(77, 255, 255), mask);
	
	imshow("mask", mask);

示例2:提取红色区域

假设有一个需求是从图像中提取绿色区域,首先需要将图像从BGR颜色空间转换到HSV颜色空间,因为HSV颜色空间更适合颜色分割:

cpp 复制代码
//图像色彩空间转换
void QuickDemo::inrange_demo(Mat &image) {
	Mat hsv;
	cvtColor(image, hsv, COLOR_BGR2HSV);
	Mat mask1, mask2, maskRed;
	//inRange(hsv, Scalar(35, 43, 46), Scalar(77, 255, 255), mask);
	Scalar lower_red1(0, 50, 50);
	Scalar upper_red1(10, 255, 255);
	Scalar lower_red2(170, 50, 50);
	Scalar upper_red2(180, 255, 255);
	

	// 应用第一个红色范围
	inRange(hsv, lower_red1, upper_red1, mask1);
	// 应用第二个红色范围
	inRange(hsv, lower_red2, upper_red2, mask2);

	// 合并两个红色范围的掩码
	bitwise_or(mask1, mask2, maskRed);
	imshow("mask", maskRed);

}

示例3:提取蓝色区域

cpp 复制代码
//图像色彩空间转换
void QuickDemo::inrange_demo(Mat &image) {
	Mat hsv;
	cvtColor(image, hsv, COLOR_BGR2HSV);
	Mat mask;
	inRange(hsv, Scalar(110, 50, 50), Scalar(130, 255, 255), mask);

	imshow("mask", mask);

}

原图

提取绿色掩膜

提取蓝色掩膜

提取红色掩膜

相关推荐
小江的记录本5 分钟前
【AI大模型选型指南】《2026年5月(最新版)国内外主流AI大模型选型指南》(企业版)
前端·人工智能·后端·ai作画·aigc·ai编程·ai写作
北京华盛恒辉软件开发公司19 分钟前
大模型运维深远海漂浮式风电系统已融合人工智能AI软件平台
运维·人工智能
HIT_Weston10 分钟前
82、【Agent】【OpenCode】bash 工具提示词(amend 风险)
人工智能·agent·opencode
阿福聊编程11 分钟前
Data-Analysis-Agent:用自然语言查数据库的开源 AI 数据分析工具
数据库·人工智能
Promise微笑15 分钟前
Geo专家于磊:Json-LD优化实战SOP与双核四驱体系
大数据·人工智能·重构·json
金智维科技官方18 分钟前
金智维入选中国信通院《高质量数字化转型技术解决方案集(2025年)》
人工智能·ai·自动化·数字化·智能体
跨境卫士苏苏20 分钟前
欧盟固定收费临近之后跨境卖家如何判断哪些轻小件先退出
大数据·人工智能·跨境电商·亚马逊·跨境
knight_9___23 分钟前
大模型project面试3
人工智能·python·语言模型·面试·大模型·agent
Aaron158824 分钟前
全频段 SDR干扰源模块解决方案(星链干扰、LORA无人机干扰)
人工智能·算法·fpga开发·硬件架构·硬件工程·无人机·信息与通信
AI医影跨模态组学26 分钟前
J Adv Res(IF=13)南方医科大学南方医院等团队:基于多模态渐进融合 Transformer 的肝细胞癌患者免疫治疗反应预测模型
人工智能·深度学习·论文·医学·医学影像·影像组学