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

news2024/10/5 18:26:59

文章目录

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


一、图像数据类型转换

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];  //B
    imgs1 = img_array[1];  //G
    imgs2 = img_array[2];  //R

    cv::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.coloradmin.cn/o/1066518.html

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

相关文章

助力电力行业数字化转型:智慧风电项目介绍

智慧电力作为电力领域的突破性进展&#xff0c;旨在实现能源领域的数字化转型。智慧电力借助数字孪生、IOT、云计算等技术&#xff0c;将传统的电力系统升级为高智能、高效能的系统&#xff0c;助力传统能源企业实现数字化转型。下面让我们来看一看山海鲸可视化提供的智慧电力相…

c#利用Chart 画图

c#利用Chart 画图 添加画图组件 编写代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; …

【网络安全-sql注入(5)】sqlmap以及几款自动化sql注入工具的详细使用过程(提供工具)

一&#xff0c;sqlmap 工具的详细使用 kali系统自带这个工具&#xff0c;无需安装直接sqlmap 后面接参数使用 Windows上参照以下方法安装即可 1-1 工具下载 1-1-1 sqlmap下载 sqlmap 工具下载地址&#xff1a; GitHub - sqlmapproject/sqlmap: Automatic SQL injection a…

6-6 两个有序链表序列的合并 分数 10

List Merge(List L1, List L2) {if (L1 NULL)return L2;if (L2 NULL)return L1;// 定义指针p和q分别指向链表L1和L2的头结点List p L1->Next;List q L2->Next;// 定义新链表的头结点和指针rList head (List)malloc(sizeof(struct Node));head->Next NULL;List r…

WinScope跟踪window/layer pb文件

WinScope web用来跟踪分析WindowManager或SurfaceFlinger在window转换期间和转换后的状态&#xff0c;跟踪记录会被写入 /data/misc/wmtrace/wm_trace.pb 和 /data/misc/wmtrace/layers_trace.pb&#xff0c;同时还会包含在错误报告中。 一、下载winscope.html curl https://a…

Cocos Creator3.8 项目实战(四)巧用九宫格图像拉伸

一、为什么要使用九宫格图像拉伸 相信做过前端的同学都知道&#xff0c;ui &#xff08;图片&#xff09;资源对包体大小和内存都有非常直接的影响。 通常ui 资源都是图片&#xff0c;也是最占资源量的资源类型&#xff0c;游戏中的ui 资源还是人机交互的最重要的部分&#xff…

阿里影业+大麦,开启大文娱新纪元?

被“精心呵护”长达十年后&#xff0c;阿里大文娱在今年终于踏上了关键节点。 3月份&#xff0c;阿里“16N”组织大变革后&#xff0c;大文娱集团独自上路。8月&#xff0c;“分家”后的第一份财报显示&#xff0c;阿里大文娱集团成功大幅扭亏&#xff0c;实现了首次季度经调整…

ToBeWritten之狩猎恶意攻击者

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…

如何下载修复xinput1_3.dll并避免常见错误 ,详解多种实用解决方法

在运行某些应用程序或游戏时&#xff0c;您可能会遇到xinput1_3.dll丢失或损坏的错误提示。这是由于操作系统缺少xinput1_3.dll文件所引起的。针对以上问题&#xff0c;我们提供了几种解决方法来修复这个问题。本文将详细介绍如何下载修复xinput1_3.dll&#xff0c;并提供一些建…

【LeetCode75】第六十六题 编辑距离

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们三种操作方式&#xff0c;插入一个字符&#xff0c;删除一个字符&#xff0c;替换一个字符。 问我们最少操作几次可以把字符串…

图形学中一些基本知识的总结与复习

前言 在过完games101课程后仍然觉得自己还有许多地方不懂与遗漏&#xff0c;以此来补充与复习一些其中的知识。 参考&#xff1a;Games101、《Unity Shader 入门精要》 GPU渲染流水线(GPU Rendering Pipeline) ----注&#xff1a;Games101课程中所展示渲染流程与书中有所不同&…

前端作业(17)

之后的20个作业&#xff0c;学自【20个JavaScript经典案例-哔哩哔哩】 https://b23.tv/kVj1P5f 支付倒计时 1. 支付10s倒计时 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compat…

【UE】在游戏运行时,通过选择uasset来生成静态网格体

目录 主要流程 步骤 一、创建用于包含静态网格体的Actor蓝图 二、按钮点击事件 效果 主要流程 用户点击按钮后产生一个文件对话框&#xff0c;用户通过文件对话框选择指定的文件夹&#xff0c;我们获取到这个文件夹路径后处理成“按路径获取资产”节点所需的输入&#x…

AdaBoost(下):数据分析 | 数据挖掘 | 十大算法之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…

录音编辑软件推荐,让你的音频制作更上一层楼!

“有没有好用的录音编辑软件推荐呀&#xff1f;就是可以用来剪辑录音的&#xff0c;领导要求我们对基层工作人员进行访谈&#xff0c;需要录音&#xff0c;可是录制的声音杂音很多&#xff0c;听不清在讲什么&#xff0c;求大家推荐一个录音编辑软件&#xff0c;谢谢啦&#xf…

更新SQLite数据库数据

本文所有代码均存放于 https://github.com/MADMAX110/Starbuzz 之前了解了如何修改应用让它从SQLite数据库中提取数据&#xff0c;但是还没有用过更新过数据库数据。 这里要修改应用使用户能够记录哪些饮料是他们的最爱。为此要为DrinkActivity增加一个复选框&#xff1b; 如果…

iPhone苹果手机闹钟智能跳过节假日怎么设置?

国内绝大多数的手机用户使用的操作系统只有三个&#xff0c;安卓、鸿蒙和苹果的ios。而iPhone苹果手机的忠实用户是非常多的&#xff0c;所以日积月累中用户数量也就非常庞大&#xff0c;并且相当一部分用户都是上班族。而工作忙碌的上班族因为事情比较多&#xff0c;为了避免自…

前端笔试题总结,带答案和解析(持续更新,上次更新23/10/5,目前有30题)

前端笔试题总结&#xff0c;带答案和解析&#xff08;持续更新&#xff0c;上次更新23/10/5&#xff0c;目前有30题&#xff09; 这个系列将持续更新前端笔试题一期十题&#xff0c;每五题做一个标题&#xff08;方便跳转&#xff09;&#xff0c;您可以一期一期阅读&#xff0…

SAP BAPI2017_GOODSMVT_CREATE 不支持 货物移动失败

SAP BAPI2017_GOODSMVT_CREATE 不支持 货物移动失败 可能的原因两种&#xff1a; 1.移动类型允许的事务代码不全 2.BAPI传值的移动类型有问题

Laya3.0 如何快速调试

点击play箭头 点击右边的开发者工具 就会弹出 chrome的调试窗口 然后定位到你自己的ts文件 直接在ts里断点即可 不需要js文件 如何自动生成代码&#xff1f; 比如你打开一个新项目 里面显示的是当前场景 只需要点击 UI运行时 右边的框就可以了 他会自动弹窗提示你 创建一个文…