【OpenCV实战】3.OpenCV颜色空间实战
OpenCV颜色空间实战
- 〇、Coding实战内容
- 一、imread
- 1.1 函数介绍
- 1.2 Flags
- 1.3 Code
- 二. 色彩空间
- 2.1 获取单色空间
- 2.2. HSV、YUV、RGB
- 2.3. 不同颜色空间应用场景
〇、Coding实战内容
- OpenCV imread()方法不同的flags差异性
- 获取单色通道【R通道、G通道、B通道】
- HSV、YUV、RGB
一、imread
1.1 函数介绍
/**
The function imread loads an image from the specified file and returns it
@param filename Name of file to be loaded.
@param flags Flag that can take values of cv::ImreadModes
**/
CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );
1.2 Flags
// enum ImreadModes {
// IMREAD_UNCHANGED = -1, //!< If set, return the loaded image as is (with alpha channel, otherwise it gets cropped). Ignore EXIF orientation.
// IMREAD_GRAYSCALE = 0, //!< If set, always convert image to the single channel grayscale image (codec internal conversion).
// IMREAD_COLOR = 1, //!< If set, always convert image to the 3 channel BGR color image.
// IMREAD_ANYDEPTH = 2, //!< If set, return 16-bit/32-bit image when the input has the corresponding depth, otherwise convert it to 8-bit.
// IMREAD_ANYCOLOR = 4, //!< If set, the image is read in any possible color format.
// IMREAD_LOAD_GDAL = 8, //!< If set, use the gdal driver for loading the image.
// IMREAD_REDUCED_GRAYSCALE_2 = 16, //!< If set, always convert image to the single channel grayscale image and the image size reduced 1/2.
// IMREAD_REDUCED_COLOR_2 = 17, //!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/2.
// IMREAD_REDUCED_GRAYSCALE_4 = 32, //!< If set, always convert image to the single channel grayscale image and the image size reduced 1/4.
// IMREAD_REDUCED_COLOR_4 = 33, //!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/4.
// IMREAD_REDUCED_GRAYSCALE_8 = 64, //!< If set, always convert image to the single channel grayscale image and the image size reduced 1/8.
// IMREAD_REDUCED_COLOR_8 = 65, //!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/8.
// IMREAD_IGNORE_ORIENTATION = 128 //!< If set, do not rotate the image according to EXIF's orientation flag.
// };
常用的有三种
a. -1 IMREAD_UNCHANGED:忽视alpha通道
b. 0 IMREAD_GRAYSCALE:灰度图
c. 1 IMREAD_COLOR 不填默认值,且格式为BGR
1.3 Code
assign_2.cpp
#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>
#include <string>using namespace cv;
using namespace std;#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>
#include <string>
using namespace cv;
using namespace std;int main(int argc, char *argv[])
{std::string filePath = std::string(__FILE__);size_t pos = filePath.find_last_of("/\\");std::string rootPath = filePath.substr(0, pos); // string path = string(__BASE_FILE__)+"/img.webp";cout << rootPath;//IMREAD_COLOR BGRMat image = imread(rootPath+"/img.webp",IMREAD_COLOR);//IMREAD_UNCHANGED, 无alpha通道Mat image1 = imread(rootPath+"/img.webp",IMREAD_UNCHANGED);//IMREAD_GRAYSCALE 灰度图Mat image2 = imread(rootPath+"/img.webp",IMREAD_GRAYSCALE);namedWindow("imread imread_unchanged"); // 创建一个标题为 "hello" 的窗口imshow("hello", image); // image1, image2 //在窗口 "hello" 中显示图片waitKey(0); // 等待用户按下键盘destroyWindow("hello"); // 销毁窗口 "hello"return 0;
}
输出结果:



二. 色彩空间
2.1 获取单色空间
#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>
#include <string>
using namespace cv;
using namespace std;int main(int argc, char *argv[])
{/*** 二、色彩空间* *///红色vector<Mat> channels;split(image, channels);//bgrchannels[0] = Mat::zeros(image.rows, image.cols, CV_8UC1); // bluechannels[1] = Mat::zeros(image.rows, image.cols, CV_8UC1); // greenMat red;merge(channels, red);//蓝色vector<Mat> channels_1;split(image, channels_1);//bgrchannels[1] = Mat::zeros(image.rows, image.cols, CV_8UC1); // greenchannels[2] = Mat::zeros(image.rows, image.cols, CV_8UC1); // redMat blue;merge(channels, blue);//绿色vector<Mat> channels_2;split(image, channels_2);//bgrchannels[0] = Mat::zeros(image.rows, image.cols, CV_8UC1); // greenchannels[2] = Mat::zeros(image.rows, image.cols, CV_8UC1); // redMat green;merge(channels, green);
}
输出结果



2.2. HSV、YUV、RGB
int main(int argc, char *argv[])
{std::string filePath = std::string(__FILE__);size_t pos = filePath.find_last_of("/\\");std::string rootPath = filePath.substr(0, pos); // string path = string(__BASE_FILE__)+"/img.webp";cout << rootPath;Mat image = imread(rootPath+"/img.webp",IMREAD_COLOR);/*** 三、色彩空间**/Mat hsv;cvtColor(image,hsv,COLOR_BGR2HSV);Mat rgb;cvtColor(image,hsv,COLOR_BGR2RGB);Mat yuv;cvtColor(image,yuv,COLOR_BGR2YUV);namedWindow("hsv"); imshow("hsv", hsv); waitKey(0); destroyWindow("hsv"); return 0;
}
输出结果



颜色空间:
具体可搜索wikipedia,有很详细的介绍
1. HSV vs HSB:https://en.wikipedia.org/wiki/HSL_and_HSV
2. YUV:可参考本人以前的一篇文章,https://blog.csdn.net/Scott_S/article/details/118525159?spm=1001.2014.3001.5501
2.3. 不同颜色空间应用场景
- RGB:视频监视器,彩色摄像机
- HSV [色调、饱和度、亮度]:彩色处理为目的
- CMYK :印刷行业,如果用过小米照片打印机,就会发现一张照片需要渲染4次,按照如下流程
- Cyan:蓝青色;
- magenta:品红、杨红;
- Yellow:黄色;
- Key: (black)
- YUV :电视信号传输,占用极少的带宽
相关文章:
【OpenCV实战】3.OpenCV颜色空间实战
OpenCV颜色空间实战 〇、Coding实战内容一、imread1.1 函数介绍1.2 Flags1.3 Code 二. 色彩空间2.1 获取单色空间2.2. HSV、YUV、RGB2.3. 不同颜色空间应用场景 〇、Coding实战内容 OpenCV imread()方法不同的flags差异性获取单色通道【R通道、G通道、B通道】HSV、YUV、RGB 一…...
什么是回调函数(callback function)?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 回调函数(Callback Function)⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这…...
零售再增长,直播登“C位”,美团稳稳交出成绩单
8月24日,美团发布2023年中期业绩和二季报,财报显示其二季度实现营收680亿元,同比增长33.4%;实现净利润47.13亿元,同比扭亏为盈,调整后净利润达历史最高水平。其中,与消费市场走势息息相关的美团…...
什么是需求可追溯性,为什么它对产品团队很重要?
随着产品变得越来越复杂,需求在开发过程中将在各个部门和利益相关方之间不断传递。可追溯性能帮助产品团队解决他们在需求管理过程中面临的一大挑战。 目前产品开发需要做出的决策比以往任何时候都多,每一种决策都需要充分考虑对具体需求和整体产品的影…...
Window基础命令
文章目录 查看哪些端口被禁用TCP协议删除开机启动项方案1方案2 查看哪些端口被禁用TCP协议 netsh interface ipv4 show excludedportrange protocoltcp删除开机启动项 方案1 列出所有启动项 bcdedit /enum仔细看你要删除的是哪一项(看description)&a…...
Java List的扩容机制原理及应用
Java List的扩容机制原理及应用 引言 在Java中,List是一种非常常用的数据结构,用于存储有序的元素集合。List的底层实现有多种,如ArrayList、LinkedList等。在使用List时,我们经常会遇到一个问题:当元素数量超过了Li…...
Cesium 显示经纬高
文章目录 需求分析 需求 页面展示经、纬度和高 分析 html <div id"latlng_show" style"width:340px;height:30px;position:absolute;bottom:40px;right:200px;z-index:1;font-size:15px;"><div style"width:100px;height:30px;float:left;…...
专访 Hyper Oracle:可编程的 zkOracle 打造未来世界的超算
许多 Web3 应用在实现的过程中,常常会遇到基础设施方面的限制,包括去中心化自动化、预言机、链上信息搜索等问题。绝大部分区块链的中间件网络都是依赖于节点质押来保证节点执行的诚实性,这样的模式会产生诸多衍生问题,例如安全性…...
ThreadLocal存放当前用户
用户信息必须由后端获取,不能通过前端传入的id是不可信的,,可能会出现越权的问题,,,怎么通过后端获取当前登录用户,,, 就需要将User 和 当前线程绑定在一起,&…...
es入门实战
创建索引 PUT /hotel/ { “mappings”:{ “properties”:{ “title”:{ “type”:“text” }, “city”:{ “type”:“keyword” }, “price”:{ “type”:“double” } } } } 给索引写入数据 POST /hotel/_doc/001 { “title”:“好再来大酒店”, “city”:“东京”, “pri…...
c++系列之指针
今天不是做题系列,是知识系列啦。 说到指针,我们初学这一定会气的牙痒痒把,笔者也是,这么我好久而不得呀,今天来让我们聊聊指针。 其一 首先,我们明确的知道,假如我们开一个变量,…...
网络安全:挑战与防护策略
一、引言 随着科技的快速发展,互联网已经成为我们生活和工作的重要组成部分。然而,随着网络技术的不断升级,网络安全问题也日益凸显。网络攻击、数据泄露、身份盗用等问题,不仅威胁到个人隐私,也对企业和国家的安全构…...
AI 插件:未来的浏览器、前端与交互
想象一下,你在浏览器中粘贴一个 URL,这个 URL 不仅仅是一个网址,而是一个功能强大、能执行多种任务的 AI 插件。这听起来像是未来的事情,但实际上,这种变革已经悄悄进行中。 1. 插件的魅力与局限性 当我第一次接触到…...
R包开发-2.1:在RStudio中使用Rcpp制作R-Package(更新于2023.8.23)
目录 0-前言 1-在RStudio中创建R包项目 2-创建R包 2.1通过R函数创建新包 2.2在RStudio通过菜单来创建一个新包 2.3关于R包创建的说明 3-添加R自定义函数 4-添加C函数 0-前言 目标:在RStudio中创建一个R包,这个R包中包含C函数,接口是Rc…...
土豆叶病害识别(图像连续识别和视频识别)
效果视频:土豆叶病害识别(Python代码,pyTorch框架,视频识别)_哔哩哔哩_bilibili 代码运行要求:Torch库>1.13.1,其它库无版本要求 1..土豆叶数据集主要包好三种类别(Early_Blight…...
三、JVM监控及诊断工具-GUI篇
目录 一、工具概述二、jconsole(了解即可)1、基本概述2、启动3、三种连接方式4、作用 三、Visual VM 一、工具概述 二、jconsole(了解即可) 1、基本概述 从Java5开始,在JDK中自带的Java监控和管理控制台用于对JVM中内…...
3211064 - 错误消息 AA634 出现在 T-cd AW01N 或 T-cd AFAR 中
症状 通过 T-cd AW01N 打开资产或在 T-cd AFAR 中重新计算资产值时,出现以下错误消息: AA634 在范围 01 中普通折旧的更正大于累计折旧 环境 SAP R/3SAP R/3 EnterpriseSAP ERP SAP ERP 中心组件SAP ERP 的 SAP 增强包SAP ERP(SAP HANA 版…...
k3s or RKE2 helm安装报错dial tcp 127.0.0.1:8080: connect: connection refused
1.报错: Error: INSTALLATION FAILED: Kubernetes cluster unreachable: Get "http://127.0.0.1:8080/version": dial tcp 127.0.0.1:8080: connect: connection refused 2.问题原因: 1.因为helm默认使用k8s的配置文件,默…...
网络安全应急响应预案演练
制定好的应急响应预案,只做培训还不够,还需要通过实战演 练来提高应对网络突发事件的行动力,针对网络突发事件的假想情 景,按照应急响应预案中规定的职责和程序来执行应急响应任务。 根据出现的新的网络攻击手段或其他特殊情况…...
Redis 的混合持久化
RDB 相比于 AOF,数据恢复的速度更快,因为是二进制数据,直接加载进内存即可,但是 RDB 的频率不好把握。 如果频率太低,在两次快照期间服务器发生宕机,可能会丢失较多的数据如果频率太高,频繁写入…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
