【Opencv图像处理】BGB转HSV与颜色检测
BGB转HSV与颜色检测
- 什么是HSV色彩空间?
- Opencv代码
- 静态图片颜色检测
- 结果展示
- 视频颜色检测
- 结果展示
什么是HSV色彩空间?
HSV(色相、饱和度、值,也称为 HSB [色相、饱和度、亮度])是 RGB(红-绿-蓝)颜色模型的替代表示形式。它由计算机图形研究人员在20世纪70年代创建,旨在与我们的人类视觉解释颜色属性的方式更紧密地匹配。
色调H
用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;
饱和度S
饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。
亮度V(I:明度)
明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。
在HSV颜色空间中颜色分量Hue对应不同颜色的灰度范围如下:
我们可以根据物体Hue分量的颜色类别来判断灰度范围,反过来,也可以根据Hue分量的灰度范围来判断物体的颜色种类。
Opencv代码
静态图片颜色检测
使用HSV色彩空间从图像和视频进行物体检测
我们有一个可调节的HSV掩码("设置掩码"窗口),该窗口遮罩原始图像并生成生成的遮罩图像。
void main()
{auto hmin = 0, smin = 0, vmin = 0;auto hmax = 0, smax = 0, vmax = 0;string path = "D:\\QT\\Opencv\\Resources\\shapes.png"; //"D:\QT\Opencv\Resources\cards.png"Mat img = cv::imread(path);Mat imgHSV, mask;cvtColor(img, imgHSV, COLOR_BGR2HSV);//将BGR转换到HSV空间namedWindow("Trackbars", (640, 200));//运行时,把3个min的都移到最小值,把3个max的都移到最大值,然后移动使其保持为白色createTrackbar("Hue Min", "Trackbars", &hmin, 179);createTrackbar("Hue Max", "Trackbars", &hmax, 179);createTrackbar("Sat Min", "Trackbars", &smin, 255);createTrackbar("Sat Max", "Trackbars", &smax, 255);createTrackbar("Val Min", "Trackbars", &vmin, 255);createTrackbar("Val Max", "Trackbars", &vmax, 255);//对于hue色相饱和度最大180,对于另外两个色相饱和度最大255while (true){//检查数组元素是否位于其他两个数组的元素之间。//imgHSV为输入图像,mask为输出图像Scalar lower(hmin, smin, vmin);Scalar upper(hmax, smax, vmax);inRange(imgHSV, lower, upper, mask);//定义颜色下限和上限,因为由于照明和不同的阴影,颜色的值将不完全相同,会是一个值的范围imshow("Image", img);imshow("Image HSV", imgHSV);imshow("Image mask", mask);waitKey(1);}waitKey(0);
}
结果展示
原图
HSV空间
蓝色对应的HSV范围
视频颜色检测
void video_colorDection(){auto hmin = 0, smin = 0, vmin = 0;auto hmax = 0, smax = 0, vmax = 0;cv::VideoCapture cap(0);//打开电脑摄像机namedWindow("Trackbars", (640, 200));//运行时,把3个min的都移到最小值,把3个max的都移到最大值,然后移动使其保持为白色createTrackbar("Hue Min", "Trackbars", &hmin, 179);createTrackbar("Hue Max", "Trackbars", &hmax, 179);createTrackbar("Sat Min", "Trackbars", &smin, 255);createTrackbar("Sat Max", "Trackbars", &smax, 255);createTrackbar("Val Min", "Trackbars", &vmin, 255);createTrackbar("Val Max", "Trackbars", &vmax, 255);//对于hue色相饱和度最大180,对于另外两个色相饱和度最大255while(true){Mat imgHSV, mask, img;cap.read(img);cvtColor(img, imgHSV, COLOR_BGR2HSV);//将BGR转换到HSV空间//检查数组元素是否位于其他两个数组的元素之间。//imgHSV为输入图像,mask为输出图像Scalar lower(hmin, smin, vmin);Scalar upper(hmax, smax, vmax);inRange(imgHSV, lower, upper, mask);//定义颜色下限和上限,因为由于照明和不同的阴影,颜色的值将不完全相同,会是一个值的范围imshow("Image", img);imshow("Image HSV", imgHSV);imshow("Image mask", mask);waitKey(10);}
}
结果展示
查找视频中的白色结果
【Opencv图像处理】BGB转HSV与颜色检测相关推荐
- OpenCV - C++实战(05) — 颜色检测
目录 第5章 颜色检测 5.1 实现原理 5.2 Lab颜色模型 5.3 cv :: threshold() 阈值函数 5.4 计算图像之间的距离 5.4.1 公式计算 5.4.2 cv::absd ...
- Python+OpenCV图像处理(十五)—— 圆检测
简介: 1.霍夫圆变换的基本原理和霍夫线变换原理类似,只是点对应的二维极径.极角空间被三维的圆心和半径空间取代.在标准霍夫圆变换中,原图像的边缘图像的任意点对应的经过这个点的所有可能圆在三维空间用圆心 ...
- python+OpenCV图像处理(十一)图像轮廓检测
图像轮廓检测 (一)检测轮廓 在OpenCV-python中,使用cv2.findContours()函数来对图像进行轮廓检测. 返回三个值:image,contours,hierarchy cont ...
- opencv图像处理之轮廓外背景颜色改变
自行学习弄得简单代码,使用了图像中的轮廓发现以及提取,再绘制出来,改变轮廓外的像素 首先,头文件,写的比较多,没用的可以自己去除 #include <opencv2/core/core.hpp& ...
- Opencv图像处理——水平线和垂直线的提取
Opencv图像处理--水平线和垂直线的提取 检测原理 图像形态学操作,可以通过自定义的结构元素实现结构元素对输入图像一些对象敏感.另外一些对象不敏感,这样就会让敏感的对象改变而不敏感的对象保留输出. ...
- OpenCV 颜色检测| color detection
OpenCV 颜色检测 1.导入必要的包并初始化相机 import cv2 import numpy as np# Reading the image img = cv2.imread('test.j ...
- python颜色识别原理_python+opencv实现颜色检测、轮廓检测、颜色追踪
准备工作 python配置numpy和openCv库 读取图像和视频图像cv2.imread(路径) cv2.imshow(窗口名称,输出对象) cv2.waitkey(等待时间)import cv2 ...
- RIKIBOT使用系列-基于Opencv HSV的色块检测
目录 一. 简介 二.查找色值 1.摄像头的角度调 2.启动检测与查找 三. 验证HSV色值 1.写入色值到文件 2.启动检测 四.交流方式 一. 简介 这里学习一下如何用摄像头检测HSV色值,Ope ...
- 基于opencv做一个HSV的颜色选择器
From sztu 自动化专业的小菜鸡. 本篇将介绍计算机视觉的HSV颜色选择器,基于python的opencv. 众所周知,每个物体的HSV值都是不同的,并且每个色系所在的HSV的颜色范围也都不同, ...
最新文章
- UML对象关系与箭头对应表
- Git/SQL/正则表达式练习平台
- linux中resize的含义,linux的resize2fs命令
- ios 原生android系统下载地址,Android/iOS已有原生项目集成ReactNative
- linux32位运行64位程序,32位windows下可以运行的程序在64位linux下报错
- linux内核 panic,linux 内核 panic
- oracle多条数据合并成一条_建议将北京地铁13-B线和28号线合并成一条线
- Open Flash Chart 图表组件
- 滴滴公司多次被下架的原因是什么,深挖测试员究竟还该不该去滴滴?
- ASP.NET站点性能提升-缩短首页生成时间
- IE浏览器,ajax提示错误“no transport”
- SQL 分页查询显示
- vue点击网页全屏_vue实现浏览器全屏展示功能
- 技术管理者需要认识管理活动的高杠杆率
- python爬取琳琅社区整站视频
- 达梦数据库的服务启动
- JAVA-受保护的访问修饰符-protected(在同一包和不同包中的使用)
- Win7开机加速全攻略四:系统服务优化
- python pip 安装包失败问题,下载缓慢问题
- 2022-12-3 图形化界面工具 添加数据