VC++中使用OpenCV进行颜色检测

这篇具有很好参考价值的文章主要介绍了VC++中使用OpenCV进行颜色检测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

VC++中使用OpenCV进行颜色检测

在VC++中使用OpenCV进行颜色检测非常简单,首选读取一张彩色图像,并调用函数cvtColor(img, imgHSV, COLOR_BGR2HSV);函数将原图img转换成HSV图像imgHSV,再设置好HSV三个分量的上限和下限值,调用inRange函数inRange(imgHSV, lower, upper, mask);将HSV色彩图像转换成掩码图,掩码图中只有黑白二值图像,从而达到颜色检测的目的。颜色检测通常可以用于物体检测和跟踪中,尤其在不同的图像和物体中根据特定的颜色去筛选出某个物体。

RGB色彩空间和HSV色彩空间

RGB色彩空间是一种被广泛接受的色彩空间,但是该色彩空间过于抽象,我们不能够直接通过其值感知具体的色彩。我们更习惯使用直观的方式来感知颜色,HSV色彩空间提供了这样的方式。通过HSV色彩空间,我们能够更加方便地通过色调、饱和度和亮度来感知颜色。

其实,除了HSV色彩空间,我们讨论的其他大多数色彩空间都不方便人们对颜色进行理解和解释。

HSL和HSV色彩空间

HSV色彩空间从心理学和视觉的角度出发,提出人眼的色彩知觉主要包含三要素:

HSL和HSV都是将RGB色彩模型中的点表示在圆柱坐标系中的方法。这两种表示法试图做到比基于笛卡尔坐标系几何结构的RGB模型更加直观。

HSL即色相、饱和度、亮度(英语:Hue, Saturation, Lightness)。

HSV即色相、饱和度、明度(英语:Hue, Saturation, Value),又称HSB,其中B即英语:Brightness。

色相(Hue)是色彩的基本属性,就是平常所说的颜色名称,如红色、黄色等。
饱和度(Saturation)是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值。
明度(Value)、亮度(Lightness)、亮度(Brightness),取0-100%。
HSL和HSV二者都把颜色描述为在圆柱坐标系内的点,这个圆柱的中心轴底部为黑色,顶部为白色,而它们中间是灰色渐变,绕这个轴的角度对应于“色相”,到这个轴的距离对应于“饱和度”,而沿着这个轴的高度对应于“亮度”、“色调”或“明度”。

这两种表示在目的上类似,但在方法上有区别。二者在数学上都是圆柱,但HSV(色相、饱和度、明度)在概念上可以被认为是颜色的倒圆锥体(黑点在下顶点,白色在上底面圆心),HSL在概念上表示了一个双圆锥体和圆球体(白色在上顶点,黑色在下顶点,最大横切面的圆心是半程灰色)。注意尽管在HSL和HSV中“色相”指称相同的性质,它们的“饱和度”的定义是明显不同的。

因为HSL和HSV是设备依赖的RGB的简单变换,(h, s, l)或 (h, s, v)三元组定义的颜色依赖于所使用的特定红色、绿色和蓝色“加法原色”。每个独特的RGB设备都伴随着一个独特的HSL和HSV空间。但是 (h, s, l)或 (h, s, v)三元组在被约束于特定RGB空间比如sRGB的时候就更明确了。

HSV模型在1978年由埃尔维·雷·史密斯创立,它是三原色光模式的一种非线性变换,如果说RGB加色法是三维直角座标系,那么HSV模型就是球面座标系。

VC++中使用OpenCV进行颜色检测,OpenCV,Visual C++和MFC,编程语言学习,c++,opencv,开发语言

HSV模型的用途

HSV模型通常用于计算机图形应用中。在用户必须选择一个颜色应用于特定图形元素各种应用环境中,经常使用HSV色轮。在其中,色相表示为圆环;可以使用一个独立的三角形来表示饱和度和明度。典型的,这个三角形的垂直轴指示饱和度,而水平轴表示明度。在这种方式下,选择颜色可以首先在圆环中选择色相,在从三角形中选择想要的饱和度和明度。
VC++中使用OpenCV进行颜色检测,OpenCV,Visual C++和MFC,编程语言学习,c++,opencv,开发语言
HSV色轮允许用户快速的选择众多颜色。

HSV模型的另一种可视方法是圆锥体。在这种表示中,色相被表示为绕圆锥中心轴的角度,饱和度被表示为从圆锥的横截面的圆心到这个点的距离,明度被表示为从圆锥的横截面的圆心到顶点的距离。某些表示使用了六棱锥体。这种方法更适合在一个单一物体中展示这个HSV色彩空间;但是由于它的三维本质,它不适合在二维计算机界面中选择颜色。
VC++中使用OpenCV进行颜色检测,OpenCV,Visual C++和MFC,编程语言学习,c++,opencv,开发语言
HSV模型的圆锥表示适合于在一个单一物体中展示整个HSV色彩空间

HSV色彩空间还可以表示为类似于上述圆锥体的圆柱体,色相沿着圆柱体的外圆周变化,饱和度沿着从横截面的圆心的距离变化,明度沿着横截面到底面和顶面的距离而变化。这种表示可能被认为是HSV色彩空间的更精确的数学模型;但是在实际中可区分出的饱和度和色相的级别数目随着明度接近黑色而减少。此外计算机典型的用有限精度范围来存储RGB值;这约束了精度,再加上人类颜色感知的限制,使圆锥体表示在多数情况下更实用。

VC++中使用OpenCV对图像进行颜色检测

通过学习油管博主murtazahassan的视频Learn-OpenCV-cpp-in-4-Hours,里面第6个OpenCV示例将到如何从一副兰博基尼的轿车图像中进行颜色检测,相关代码地址为:Learn-OpenCV-cpp-in-4-Hours
/Chapter6.cpp
如下所示:

#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>

using namespace cv;
using namespace std;

///  Color Detection  //

void main() {

	string path = "Resources/lambo.png";
	Mat img = imread(path);	// 原图
	Mat imgHSV, mask;	// HSV图,掩码图
	int hmin = 0, smin = 110, vmin = 153;	// HSV三个分量的最小值
	int hmax = 19, smax = 240, vmax = 255;  // HSV三个分量的最大值

	cvtColor(img, imgHSV, COLOR_BGR2HSV);	// 将img原图转换为HSV色彩空间图像

	namedWindow("Trackbars", (640, 200));	// 创建一个宽为640,高为200的,窗口名称为Trackbars的窗口
	createTrackbar("Hue Min", "Trackbars", &hmin, 179); // 在窗口名称为Trackbars的窗口中创建一个名为Hue Min的滑动条,最小值默认为0,最大值为179,滑动条所在值即为hmin,用来控制H分量的最小值
	createTrackbar("Hue Max", "Trackbars", &hmax, 179); // 在窗口名称为Trackbars的窗口中创建一个名为Hue Max的滑动条,最小值默认为0,最大值为179,滑动条所在值即为hmax,用来控制H分量的最大值
	createTrackbar("Sat Min", "Trackbars", &smin, 255);	// 在窗口名称为Trackbars的窗口中创建一个名为Sat Min的滑动条,最小值默认为0,最大值为255,滑动条所在值即为smin,用来控制S分量的最小值
	createTrackbar("Sat Max", "Trackbars", &smax, 255); // 在窗口名称为Trackbars的窗口中创建一个名为Sat Max的滑动条,最小值默认为0,最大值为255,滑动条所在值即为smax,用来控制S分量的最大值
	createTrackbar("Val Min", "Trackbars", &vmin, 255);  // 在窗口名称为Trackbars的窗口中创建一个名为Val Min的滑动条,最小值默认为0,最大值为255,滑动条所在值即为vmin,用来控制V分量的最小值
	createTrackbar("Val Max", "Trackbars", &vmax, 255);  // 在窗口名称为Trackbars的窗口中创建一个名为Val Max的滑动条,最小值默认为0,最大值为255,滑动条所在值即为vmax,用来控制V分量的最大值

    // 循环检测用户操作,用户可以通过Trackbars窗口中的滑动条分别控制H、S、V三个分量的最小和最大值,从而控制mask图像的最终呈现
	while (true) {

		Scalar lower(hmin, smin, vmin);
		Scalar upper(hmax, smax, vmax);
		inRange(imgHSV, lower, upper, mask);	// 根据lower和upper以及imgHSV图像生成mask图像

		imshow("Image", img);	// 显示原图
		imshow("Image HSV", imgHSV);  // 显示HSV色彩图像
		imshow("Image Mask", mask);	  // 显示mask图像
		waitKey(1);	// 等待用户键盘输入,等待1毫秒
	}
}

图片资源下载地址为:https://github.com/murtazahassan/Learn-OpenCV-cpp-in-4-Hours/tree/main/Resources
VC++中使用OpenCV进行颜色检测,OpenCV,Visual C++和MFC,编程语言学习,c++,opencv,开发语言
将代码拷贝到Visual Studio 2017中控制台程序中运行,并配置好OpenCV的头文件和库文件,运行结果如下图所示:
VC++中使用OpenCV进行颜色检测,OpenCV,Visual C++和MFC,编程语言学习,c++,opencv,开发语言
通过Trackbars窗口中的一些HSV相关滑动条可以调整H、S、V分量的最大和最小值,从而控制·Image Mask`窗口中的最终图像的显示。文章来源地址https://www.toymoban.com/news/detail-811963.html

参考资料

  • HSL和HSV色彩空间
  • OpenCV—HSV色彩空间基础知识
  • 三分钟带你快速学习RGB、HSV和HSL颜色空间
  • https://github.com/murtazahassan/Learn-OpenCV-cpp-in-4-Hours
  • Learn-OpenCV-in-3-hours
  • https://github.com/murtazahassan
  • Learn-OpenCV-cpp-in-4-Hours C++ Video
  • Learn-OpenCV-in-3-hours Python Video

到了这里,关于VC++中使用OpenCV进行颜色检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【ONNX】使用 C++ 调用 ONNX 格式的 PyTorch 深度学习模型进行预测(Windows, C++, PyTorch, ONNX, Visual Studio, OpenCV)

    要使用 ONNX 模型进行预测,就需要使用 onnx runtime 首先到 ONNX 官网查询所需的版本 这里使用的 Windows,同时装了 CUDA 下面的链接可以进入到安装网址 https://www.nuget.org/packages/Microsoft.ML.OnnxRuntime.Gpu 安装命令为: 首先打开 Visual Studio 2019 新建一个用于测试的项目 右键点击项目,可

    2024年02月09日
    浏览(44)
  • Opencv4基于C++基础入门笔记:图像 颜色 事件响应 图形 视频 直方图 Opencv4基于C++的 实时人脸检测

      效果图 ◕‿◕:opencv人脸识别效果图(请叫我真爱粉)✌✌✌先看一下效果图勾起你的兴趣!  文章目录: 一:环境配置搭建 二:图像 1.图像读取与显示 main.cpp  运行结果 2.图像色彩空间转换 2.1 换色彩  test.h  test.cpp main.cpp    运行结果 2.2 照片换背景 test.h        test.

    2024年02月13日
    浏览(40)
  • Visual C++(VC)6.0安装教程

    亲爱滴同学们 今天来安装VC 6.0 安装包可以直接去我的主页资源里下载安装包哦 或者私信我😎 Visual C++ 6.0,简称VC或者VC6.0,是微软的一款C++编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。Visual C++是一个功能强大的可视化软件开发工具。 下面就是详细的安

    2024年02月14日
    浏览(26)
  • Microsoft Visual C++下载,VC++下载

    Microsoft Visual C++ 2019 v14.28.29617 Microsoft Visual C++ Redistributable(系统运行库,简称MSVC,VB/VC)是Windows操作系统应用程序的基础类型库组件。 Microsoft Visual C++运行库,Windows系统装机必备组件,这是官方版安装包。 Microsoft Visual C++ 2019为创建基于微软 Windows 和基于 Microsoft .NET 的应用

    2024年02月12日
    浏览(52)
  • Microsoft微软官方Win10 visual c++(vc++2019)运行库下载

    最新支持Visual C++ 可再发行程序包下载 | Microsoft Docs 本文列出了最新版本的包的下载Visual C++ 可再发行程序包链接。 https://support.microsoft.com/zh-cn/help/2977003/the-latest-supported-visual-c-downloads 安装后可以解决某些软件(如QQ)运行时 .dll 文件报错问题

    2024年02月16日
    浏览(42)
  • Win11无法运行Visual C++ 6.0?VC6.0不兼容解决办法

    最近老是有用户跟小编反映自己的Win11电脑无法运行Visual C++ 6.0,不知道该如何解决?Windows 11在安装Visual C++ 6.0后需要进一步设置才能运行。 配置方法: 1、更改“MSDEV.EXE”文件名 找到 Visual C++ 6.0 的安装目录(一般在“C:Program Files (x86)Microsoft Visual StudioCommonMSDev98Bin”

    2024年02月11日
    浏览(41)
  • 解决Visual C++ Redistributable安装找不到vc_runtimeMinimum_x86.msi最简单办法

    今天在安装Fritzing的时候,遇到了需要Visual C++ Redistributable支持包,所以就动手安装,发现居然不能安装,安装几次居然错误提示所需要的安装包*.MSI的居然名称还不用。我也是下载了各种版本来试图靠运气过关,结果失败告终。 文章出处: https://blog.csdn.net/haigear/article/detai

    2023年04月22日
    浏览(32)
  • OpenCV 项目开发实战--对图像中的斑点进行检测(Python、C++代码实现)

    Blob 是图像中一组连接的像素,它们共享一些共同的属性(例如,灰度值)。在上图中,暗连接区域是斑点,斑点检测旨在识别和标记这些区域。 文末附相关测试代码的下载链接 OpenCV 提供了一种基于不同特征检测和过滤斑点的便捷方法。让我们从最简单的例子开始 Python

    2024年02月14日
    浏览(35)
  • 使用 OpenCV 进行面部和眼睛检测

    OpenCV是构建计算机视觉应用程序的强大工具。计算机视觉中最常见的任务之一是人脸检测,它涉及识别图像或视频中人脸的存在、位置和面部特征。 在本文中,我们将学习如何使用 Haar 级联分类器检测图像中的人脸。 先决条件 在开始之前,你需要在计算机上安装 OpenCV。 参

    2024年02月09日
    浏览(47)
  • 如何使用OpenCV库进行图像检测

    import cv2 # 加载Haar级联分类器 face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + \\\'haarcascade_frontalface_default.xml\\\') # 读取输入图像 img = cv2.imread(\\\'input_image.jpg\\\') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 使用Haar级联分类器进行人脸检测 faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors

    2024年02月16日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包