OpenCV 图像色彩空间转换与抠图

一、知识点:

1、色彩空间转换函数
  (1)、void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0, AlgorithmHint hint = cv::ALGO_HINT_DEFAULT );
  (2)、将图像从一种颜色空间转换为另一种。
  (3)、参数说明:
      src: 输入图像,即要进行颜色空间变换的原图像。
      dst: 输出图像,即进行颜色空间变换后的图像。
      code: ColorConversionCodes枚举值,确定从什么颜色空间转换到什么颜色空间,如: COLOR_BGR2RGB、 COLOR_BGRA2RGBA、 COLOR_BGR2GRAY、 COLOR_BGR2HSV。
      dstCn: 指定目标图像的通道数,若为0,则通道数由src和code决定。
      hint: 算法提示。
  (5)、注意:
      对于RGB色彩空间,OpenCV的通道顺序是BGR,即标准24位彩色图像,第一个字节是蓝色分量,第二个字节是绿色分量,第三个字节是红色分量,第四、第五、第六依次是第二个像素的蓝、绿、红分量,以此类推。
      cvtColor用COLOR_BGR2RGB和用COLOR_RGB2BGR来转换原RGB色彩空间的图像,效果是一样的。
      本质上内部调用mixChannels()函数,都是将原先的B通道拷贝给目标的R通道,将原先的G通道拷贝给目标的G通道,将原先的R通道拷贝给目标的B通道。
      
2、HSV颜色空间
  (1)、H: 色相,即什么颜色,opencv中取值范围[0, 180]。
  (2)、S: 饱和度,即颜色有多深,opencv中取值范围[0, 255]。
  (3)、V: 色调、纯度、亮度,即颜色有多亮,opencv中取值范围[0, 255]。
  (4)、HSV颜色范围:
      黑: H[0, 180],S[0, 255],V[0, 46]。
      灰: H[0, 180],S[0, 43],V[46, 220]。
      白: H[0, 180],S[0, 30],V[221, 255]。
      红: H[0, 10]、[156、 180], S[43, 255],V[46, 255]。 
      橙: H[11, 25],S[43, 255],V[46, 255]。
      黄: H[26, 34],S[43, 255],V[46, 255]。
      绿: H[35, 77],S[43, 255],V[46, 255]。
      青: H[78, 99],S[43, 255],V[46, 255]。
      蓝: H[100, 124],S[43, 255],V[46, 255]。
      紫: H[125, 155],S[43, 255],V[46, 255]。 
  (5)、HSV比RGB更容易区分出颜色。
  
3、void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst);
  (1)、创建一个掩码dst,将原始图像src中满足给定范围[lowerb, upperb]条件的像素置255,其余置0。
  (2)、参数说明:
      src: 输入图像。
      lowerb: 下界,与输入图像类型和通道数相同的标量。
      upperb: 上界,与输入图像类型和通道数相同的标量。
      dst: 输出掩码,类型为CV_8UC1。
      
      
二、示例代码: 从原始绿色背景图像中抠出人物到红色背景图像中

#include <iostream>
#include <opencv2/opencv.hpp>int main()
{cv::Mat src1 = cv::Mat::zeros(3, 3, CV_8UC3);src1 = cv::Scalar(100, 20, 200);std::cout << "src1:" << std::endl << src1 << std::endl;//先把原B通道给目标R通道,再把原G通道给目标G通道,再把原R通道给目标B通道。cv::Mat dst2;cv::cvtColor(src1, dst2, cv::COLOR_BGR2RGB);std::cout << "dst2:" << std::endl << dst2 << std::endl;//先把原R通道给目标B通道,再把原G通道给目标G通道,再把原B通道给目标R通道。//所以dst2和dst3的结果是一样的。cv::Mat dst3;cv::cvtColor(src1, dst3, cv::COLOR_RGB2BGR);std::cout << "dst3:" << std::endl << dst3 << std::endl;cv::Mat src2 = cv::imread("../images/9.png");if (src2.empty()){std::cout << "load src2 image error..." << std::endl;return -1;}else{std::cout << "load src2 image ok..." << std::endl;cv::imshow("原始图像", src2);}//转换成HSV色彩空间后,显示的HSV图像颜色变了,猜测是imshow把hsvImage还是按BGR的方式显示。cv::Mat hsvImage;cv::cvtColor(src2, hsvImage, cv::COLOR_RGB2HSV);cv::imshow("HSV图像", hsvImage);//绿色的HSV最小值cv::Scalar(35, 43, 46),最大值cv::Scalar(77, 255, 255)。//把图像的绿色背景在mask中对应位置置255,其余置0。cv::Mat mask;cv::inRange(hsvImage, cv::Scalar(35, 43, 46), cv::Scalar(77, 255, 255), mask);cv::imshow("mask", mask);//mask取反,绿色背景在mask中对应位置置0,其余置255。cv::bitwise_not(mask, mask);cv::imshow("mask not", mask);//创建一个红色背景图cv::Mat redbackImage = cv::Mat::zeros(src2.size(), src2.type());redbackImage = cv::Scalar(40, 40, 200);//抠图拷贝到红色背景图上src2.copyTo(redbackImage, mask);cv::imshow("ROI区域提取", redbackImage);cv::waitKey(0);return 0;
}

输出结果:
src1:
[100,  20, 200, 100,  20, 200, 100,  20, 200;
 100,  20, 200, 100,  20, 200, 100,  20, 200;
 100,  20, 200, 100,  20, 200, 100,  20, 200]
dst2:
[200,  20, 100, 200,  20, 100, 200,  20, 100;
 200,  20, 100, 200,  20, 100, 200,  20, 100;
 200,  20, 100, 200,  20, 100, 200,  20, 100]
dst3:
[200,  20, 100, 200,  20, 100, 200,  20, 100;
 200,  20, 100, 200,  20, 100, 200,  20, 100;
 200,  20, 100, 200,  20, 100, 200,  20, 100]
load src2 image ok...


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/84307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高斯列主元消去法——python实现

高斯列主元消去法 1. 高斯消去法 高斯消去法是一种求解线性方程组 A x b A\mathbf{x} \mathbf{b} Axb 的方法&#xff0c;通过逐步化简增广矩阵&#xff0c;将其变为上三角矩阵&#xff0c;从而方便求解未知数。 线性方程组的一般形式为&#xff1a; { a 11 x 1 a 12 x…

linux下安装elasticsearch及ik分词器

linux下安装elasticsearch及ik分词器 安装版本 linux版本&#xff1a;centos7.5 es版本&#xff1a;elasticsearch-7.14.0-linux-x86_64.tar.gz 下载地址&#xff1a;https://www.elastic.co/downloads/past-releases#elasticsearch Ik版本&#xff1a;elasticsearch-analysi…

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…

【配置篇】告别硬编码:多环境配置、@ConfigurationProperties与配置中心初探

摘要 本文是《Spring Boot 实战派》系列的第五篇&#xff0c;聚焦于企业级应用开发中至关重要的配置管理。文章将首先解决开发、测试、生产环境配置不同的痛点&#xff0c;详细介绍 Spring Boot 的 Profile&#xff08;多环境配置&#xff09; 机制。接着&#xff0c;我们将深…

代码随想录算法训练营第60期第六十三天打卡

大家好&#xff0c;我们昨天讲解的是拓扑排序与Dijkstra算法的朴素版&#xff0c;其实我们大致了解了两种算法的代码实现&#xff0c;我们通过上次博客了解到拓扑排序其实是可以判断图里是否存在环&#xff0c;而Dijkstra算法则使用于非负边权最短路的求解&#xff0c;今天我们…

linux中如何在日志里面检索nowStage不等于1的数据的指令

你想在 Linux 中查找日志文件中 nowStage 不等于 1 的所有 JSON 行&#xff0c;当前你已经使用了&#xff1a; Bash 深色版本 grep -rn "nowStage" ./ 这个命令可以找到包含 "nowStage" 字样的所有行及其所在的文件名和行号&#xff0c;但还不能筛选出 no…

【习题】DevEco Studio的使用

判断题 1. 如果代码中涉及到一些网络、数据库、传感器等功能的开发&#xff0c;均可使用预览器进行预览。 正确(True) 错误(False) 正确答案: 错误(False) 知识点 预览器的使用。解析&#xff1a;预览器只支持对页面的预览&#xff0c;如果代码中涉及到一些网络、数据库、…

SpringBoot实现简易直播

当下直播技术已经成为各类应用不可或缺的一部分&#xff0c;从社交媒体到在线教育&#xff0c;再到电子商务和游戏领域&#xff0c;直播功能正在被广泛应用。 本文将介绍如何使用SpringBoot框架构建一个直播流推拉系统。 一、直播技术基础 1.1 推流与拉流概念 直播系统的核心…

xcode 各版本真机调试包下载

下载地址 https://github.com/filsv/iOSDeviceSupport 使用方法&#xff1a; 添加到下面路径中&#xff0c;然后退出重启xcode /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport

DL00871-基于深度学习YOLOv11的盲人障碍物目标检测含完整数据集

基于深度学习YOLOv11的盲人障碍物目标检测&#xff1a;开启盲人出行新纪元 在全球范围内&#xff0c;盲人及视觉障碍者的出行问题一直是社会关注的重点。尽管技术不断进步&#xff0c;许多城市的无障碍设施依然未能满足盲人出行的实际需求。尤其是在复杂的城市环境中&#xff…

Python 训练 day46

知识点回顾&#xff1a; 不同CNN层的特征图&#xff1a;不同通道的特征图什么是注意力&#xff1a;注意力家族&#xff0c;类似于动物园&#xff0c;都是不同的模块&#xff0c;好不好试了才知道。通道注意力&#xff1a;模型的定义和插入的位置通道注意力后的特征图和热力图 作…

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…

Qwen系列之Qwen3解读:最强开源模型的细节拆解

文章目录 1.1分钟快览2.模型架构2.1.Dense模型2.2.MoE模型 3.预训练阶段3.1.数据3.2.训练3.3.评估 4.后训练阶段S1: 长链思维冷启动S2: 推理强化学习S3: 思考模式融合S4: 通用强化学习 5.全家桶中的小模型训练评估评估数据集评估细节评估效果弱智评估和民间Arena 分析展望 如果…

yolo模型精度提升策略

总结与行动建议 立即行动&#xff1a; 显著增加6种相似BGA的高质量、多样化训练数据&#xff08;2倍以上是合理起点&#xff09;。 实施针对性数据增强&#xff1a; 设计模拟BGA实际成像挑战&#xff08;反光、模糊、视角变化&#xff09;的增强方案。 升级模型与损失函数&am…

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …

使用Docker部署MySQLRedis容器与常见命令

目录 1. 检查WSL配置2. 设置WSL版本3. 拉取MySQL镜像4. 验证镜像5. 运行MySQL容器在WSL环境中使用以下命令启动MySQL容器查看容器/镜像的完整信息显式指定宿主机挂载路径可选&#xff1a;在Windows的cmd中使用以下命令启动MySQL容器 6. 管理容器启动已创建的容器查看运行中的容…

01__C++入门

一、C的语法框架 首先学习一门语言&#xff0c;我们需要了解语言的基本框架&#xff0c;这一小节&#xff0c;我们学习C的历史应用&#xff0c;c和c的区别和c的标准 二、认识C 1、C的历史 所有的主流C编译器都支持这个版本的C&#xff08;1998年的版本&#xff09;。 2、C的应…

2024 CKA题库+详尽解析| 15、备份还原Etcd

目录 免费获取题库配套 CKA_v1.31_模拟系统 15、 备份还原Etcd 题目&#xff1a; 开始操作: 1&#xff09;、切换集群 2&#xff09;、登录master并提权 3&#xff09;、备份Etcd现有数据 4&#xff09;、验证备份数据快照 5&#xff09;、查看节点和Pod状态 6&am…

Flotherm许可的并发用户数限制

在电子产品热设计领域&#xff0c;Flotherm软件以其卓越的性能和精确的仿真能力而受到广大用户的青睐。然而&#xff0c;在使用Flotherm软件时&#xff0c;了解其许可的并发用户数限制对于优化资源配置和提升工作效率至关重要。本文将详细介绍Flotherm软件许可的并发用户数限制…

读取宝塔方法,查找容别名存放位置

可以查到对应方法 根据参数名可知 查找到 得到位置