OpenCV4(C++) —— 图像数据类型转换和颜色模型转换

文章目录

  • 一、图像数据类型转换
  • 二、颜色模型转换
  • 三、通道的分离和融合


一、图像数据类型转换

OpenCV中使用imread读取一张彩色图像时,默认采用的是BGR通道和整数类型(0-255,CV_8U)。
在某些情况下,会将整数类型(0-255)转换为浮点类型(0-1),可采用 convertTo() 函数。它将源图像的每个元素按照以下公式进行转换: dst = src*缩放因子+偏移量

cv::Mat img = cv::imread("C:/Users/Opencv/temp/lena.png");
cv::Mat img2;
img.convertTo(img2, CV_32F, 1 / 255.0, 0);
// img2:目标图像
// CV_32F:目标数据类型
// 1 / 255.0:缩放因子,默认为1
// 0:偏移量,默认为0

注:因为是BGR通道顺序,所以例如左图的第一个像素点,B为247,G为247,R为229

二、颜色模型转换

在OpenCV中,彩色图像默认读取为RGB颜色模型(但通道相反,BGR)。还有其他的颜色模型,如YUV、HSV、Lab、GRAY等,都是可以进行转换的。使用的转换函数是 cvtColor()函数

cv::cvtColor(src, dst, code, dstCn=0);
// code:颜色空间转换的标志,如由RGB空间到HSV空间——COLOR_BGR2HSV
// dstCn:目标图像中的通道数,如果参数为0,则从src和代码中自动导出通道数

代码如下(示例):

#include <opencv2/opencv.hpp>  
#include<iostream>  using namespace std;int main()
{cv::Mat img = cv::imread("C:/Users/Opencv/temp/lena.png");cv::Mat img2;img.convertTo(img2, CV_32F, 1 / 255.0, 0);cv::Mat HSV;cv::cvtColor(img, HSV, cv::COLOR_BGR2HSV);cv::Mat gray;cv::cvtColor(img, gray, cv::COLOR_BGR2GRAY);return 0;
}

其中:转为GRAY灰度图的方式:gray = R * 0.3 + G * 0.59 + B * 0.11
在这里插入图片描述

三、通道的分离和融合

OpenCV采用的是BGR的通道顺序,可以使用通道的分离和融合来进行验证。主要函数:split和merge

#include <opencv2/opencv.hpp>
#include <vector>
#include<iostream>  
using namespace std;int main()
{cv::Mat img = cv::imread("C:/Users/Opencv/temp/lena.png");cv::Mat img_array[3];cv::Mat imgs0, imgs1, imgs2; //用于存放数组类型的结果cv::split(img, img_array);imgs0 = img_array[0];  //Bimgs1 = img_array[1];  //Gimgs2 = img_array[2];  //Rcv::Mat zero1 = cv::Mat::zeros(cv::Size(img.cols, img.rows), CV_8UC1);cv::Mat zero2 = zero1.clone();vector<cv::Mat> imgsV1;imgsV1.push_back(imgs0);  // B通道放在第一个imgsV1.push_back(zero1);imgsV1.push_back(zero2);cv::Mat imgM1;cv::merge(imgsV1, imgM1);cv::imshow("RGB-B通道", imgM1); //显示分离后B通道的像素值vector<cv::Mat> imgsV2;imgsV2.push_back(zero1);imgsV2.push_back(zero2);imgsV2.push_back(imgs2);  // R通道放在最后一个cv::Mat imgM2;cv::merge(imgsV2, imgM2);cv::imshow("RGB-R通道", imgM2); //显示分离后R通道的像素值cv::waitKey(0);cv::destroyAllWindows();return 0;
}

在这里插入图片描述

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

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

相关文章

VUE3技术报告

文章目录 node和webstorm基本概念1. Node.js2. npm3.Webpack4. Vue webstorm创建vue项目1. 通过npx create-vue创建vue项目2. 通过npx --package vue/cli vue创建vue项目 VUE3起步-创建应用-挂载应用1. createApp 创建函数&mount挂载应用2. 创建应用中的data选项3. methods…

docker搭建Jenkins及基本使用

1. 搭建 查询镜像 docker search jenkins下载镜像 docker pull jenkins/jenkins启动容器 #创建文件夹 mkdir -p /home/jenkins_home #权限 chmod 777 /home/jenkins_home #启动Jenkins docker run -d -uroot -p 9095:8080 -p 50000:50000 --name jenkins -v /home/jenkins_home…

微信如何防止被限制?一文了解原因和处理方法

微信引流频繁被限制加好友&#xff0c;是许多人在营销过程中遇到的一大难题。为了解决这一问题&#xff0c;我们需要先了解微信官方对好友添加的限制和政策。只有明确了这些规定&#xff0c;才能更有效地进行微信引流&#xff0c;提高营销效果。 为什么被限制&#xff1f; 为了…

网络层·IP协议

承接前文TCP协议-CSDN博客 简介 协议头格式 网段划分(重要) 划分方法 IP地址的数量限制(背景介绍) 私有IP地址和公网IP地址(提出解决思路) NAT技术(解决方法) 路由 网络层 在复杂的网络环境中确定一个合适的路径 IP协议 主机: 配有IP地址, 可以认为就是你的电脑; 路由器:…

苹果手机的祛魅时刻,国产厂商的颠覆征程

“iPhone翻车了&#xff1f;”有网友如此质疑。 发布未满一个月&#xff0c;iPhone 15系列多次因负面问题登上热搜。 首先曝出钛金属边框容易沾染指纹的情况&#xff0c;尚未涉及功能性方面&#xff0c;但后续接连曝出发热严重、电池循环次数低、外放破音、Wi-Fi链接缓慢的问…

熔断、限流、降级 —— SpringCloud Alibaba Sentinel

Sentinel 简介 Sentinel 是阿里中间件团队开源的&#xff0c;面向分布式服务架构的高可用流量防护组件&#xff0c;主要以流量为切入点&#xff0c;从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性 Sentinel 提供了两个服务组件…

vue3+elementPlus ElMessageBox消息框取消按钮位置调整

要求所有的ElMessageBox消息弹出框的取消按钮放在右边&#xff0c;如图 代码如下 <script lang"ts" setup> import { ElMessageBox } from element-plus const btnHandle () >{ElMessageBox.confirm(确定要删除该人员吗&#xff1f;,提示,{cancelButtonCl…

winform中DevExpress控件一些属性

1.DevExpress控件bar去掉前面四点和后面的倒三角。 如图。设置bar属性optionsBar→allowQuickCustomizationFALSE

6+孟德尔随机化。

今天给同学们分享一篇孟德尔随机化的生信文章“Association between biological aging and lung cancer risk: Cohort study and Mendelian randomization analysis”&#xff0c;这篇文章于2023年1月19日发表在iScience期刊上&#xff0c;影响因子为6.107。 癌症是全世界癌症死…

高压放大器在超声马达中的应用有哪些

高压放大器是一种广泛应用于电子设备和工业自动化领域的电路&#xff0c;它可以将输入信号放大到高电压高电流的输出端。在超声马达中&#xff0c;高压放大器可以起到重要的作用&#xff0c;下面将详细介绍其应用。 医疗设备&#xff1a;超声波技术在医疗领域有着广泛的应用&am…

11.2SpringBoot

一.简介 1.Spring Boot是Spring的一次飞跃的升级,大大简化了开发. 2.Spring Boot有三大特点,分别是快速添加依赖,内置web容器,自动装配. 二.创建项目 1.创建时打包方式改为maven,jdk版本选择8(和本地环境匹配),SpringBoot版本使用2.*的稳定版(和jdk环境相匹配,如果本地使用…

【数据结构与算法】之“堆”介绍

目录 堆的基本存储 一、概念及其介绍 二、适用说明 三、结构图示 堆的 shift up 堆的 shift down 基础堆排序 一、概念及其介绍 二、适用说明 三、过程图示 优化堆排序 索引堆及其优化 一、概念及其介绍 二、适用说明 三、结构图示 堆的基本存储 一、概念及其介…