《opencv实用探索·三》opencv Mat与数组互转

news2024/11/26 14:36:49

1、利用Mat来存储数据,避免使用数组等操作

//创建一个两行一列的矩阵
 cv::Mat mean = (cv::Mat_<float>(2, 1) << 0.77, 0.33);

 std::cout() << mean << std::endl;
 float a = mean.at<float>(0, 0);   //0.77
 float b = mean.at<float>(1, 0);   //0.33

2、数组传递给Mat

unsigned char buf[2][3]; //创建一个两行三列的数组
cv::Mat img(2, 3, CV_8UC1, (unsigned char*)buf);  //将数组转为一个两行三列的Mat类型

3、将Mat中的数据传递给数组

//如果Mat中的数据是连续的,传递到一维vector可以这样写
std::vector<uchar> array_(mat.rows * mat.cols);
if (mat.isContinuous())
    array_ = mat.data();
//传递到一维数组可以这样写
unsigned char* arr = new unsigned char[mat.rows * mat.cols];
if (mat.isContinuous())
    arr = mat.data();

在这里插入图片描述
在这里插入图片描述

C<number_of_channels>----代表通道数,C3表示3通道,没加默认位单通道
CV_8U-无符号8位整数(0-255)
CV_8S-有符号8位整数(-128-127)
CV_16U-无符号16位整数(0-65535)
CV_16S-有符号16位整数(-32768-32767)
CV_32S-有符号32位整数(-2147483648-2147483647)
CV_32F-有符号32位浮点数
CV_64F-有符号64位浮点数

注意:
单通道灰度图转三通道时,RGB三个通道像素值相等,效果看起来和单通道灰度图一样,唯一区别在于三通道灰度图上面绘制多边形可以设置颜色。

其他的一些补充:
(1)

Vec3f v3f(1.0, 3.0, 6.0); //三维向量,三通道float相当于含有三个float的数组

(2)
在这里插入图片描述

float matrix[3][3] = { 4717.0, 0, 3926.09, 0, 4716.051, 2910.57, 0, 0, 1 };
cv::Mat z3 = cv::Mat(3, 3, CV_32FC3, matrix); //CV_32FC3不加C3默认为单通道,这里是三个通道,每个通道占32位
Z3 = [4717.0, 0, 3926.09, 0, 4716.051, 2910.57, 0, 0, 1;
杂数,杂数,杂数,杂数,杂数,杂数,杂数,杂数,杂数;
杂数,杂数,杂数,杂数,杂数,杂数,杂数,杂数,杂数
]

Vec3f v3f = mat.at<Vec3f>(0, 1); //获取第一行第二列像素(0, 4716.051, 2910.57)
cout << v3f << endl;; //(0, 4716.051, 2910.57)
//Vec3b是一个三通道类型,每个通道为一个uchar  
Vec3b v3b(100, 110, 200); //B = 100, G = 110, R = 200

在这里插入图片描述

//创建Mat对象,保存一张彩色图像(有3个通道),假设已知图像的数据类型是uchar注意(2, 3)对应(y, x)
Mat image = imread("d:/test/apple.jpg", 1); 

//为图像(y,x)位置的像素点B通道重新赋值 image.at<Vec3b>(2,3)[1]=200;//为图像(y,x)位置的像素点G通道重新赋值 image.at<Vec3b>(2,3)[2]=199;//为图像(y,x)位置的像素点R通道重新赋值遍历RGB图像读出像素值:(rows为行,cols为列,(rows, cols)->(y, x))
image.at<Vec3b>(2,3)[0]=255;

在这里插入图片描述

cv::Mat z3 = cv::Mat::zeros(3, 4, CV_8UC3); //零矩阵 cout<<z1<<endl; 3行4列,CV_8UC3无符号8位3通道

在这里插入图片描述
[(B,G,R), (B,G,R), (B,G,R), (B,G,R);
(B,G,R), (B,G,R), (B,G,R), (B,G,R);
(B,G,R), (B,G,R), (B,G,R), (B,G,R);
]

一个RGB32的像素,总共占32位,R,G,B分别占8位,还有一个空8位不用,可以用Vec3b获取RGB32像素值
一个ARGB32的像素,总共占32位,R,G,B,A分别占8位,可以用Vec4b获取ARGB32像素值

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

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

相关文章

『Linux升级路』基础开发工具——make/Makefile

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;Linux &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、认识make/Makefile &#x1f4d2;1.1make/Makefile的优点 &#x1f4d2;…

windows dockerdesktop 安装sqlserver2022

1.下载windows dockertop软件 下载连接 2.安装完成配置&#xff0c;下载源地址 {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": …

flink源码分析之功能组件(三)-rpc组件

简介 本系列是flink源码分析的第二个系列,上一个《flink源码分析之集群与资源》分析集群与资源,本系列分析功能组件,kubeclient,rpc,心跳,高可用,slotpool,rest,metrics,future。 本文解释rpc组件,rpc组件用于个核心组件,包括作业管理器,资源管理器和任务管理器之…

基于C#实现鸡尾酒排序(双向冒泡排序)

通俗易懂点的话&#xff0c;就叫“双向冒泡排序”。 冒泡是一个单向的从小到大或者从大到小的交换排序&#xff0c;而鸡尾酒排序是双向的&#xff0c;从一端进行从小到大排序&#xff0c;从另一端进行从大到小排序。 从图中可以看到&#xff0c;第一次正向比较&#xff0c;我们…

vulfocus apache-cve_2021_41773 漏洞复现

vulfocus apache-cve_2021_41773 漏洞复现 名称: vulfocus/apache-cve_2021_41773 描述: Apache HTTP Server 2.4.49、2.4.50版本对路径规范化所做的更改中存在一个路径穿越漏洞&#xff0c;攻击者可利用该漏洞读取到Web目录外的其他文件&#xff0c;如系统配置文件、网站源码…

SDN之Ubuntn20.04OpenDaylight控制器的安装

目录 1.OpenDaylight简介2.安装JAVA环境3.安装OpenDaylight4.问题总结 1.OpenDaylight简介 OpenDaylight&#xff08;ODL&#xff09;是一个开源的软件定义网络&#xff08;SDN&#xff09;控制器平台&#xff0c;提供了非常美观且功能完善的可视化管理界面&#xff0c;方便用…

邮政快递查询单号查询入口,分析筛选出其中的提前签收件

批量查询邮政快递单号的物流信息&#xff0c;并将其中的提前签收件分析筛选出来。 所需工具&#xff1a; 一个【快递批量查询高手】软件 邮政快递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;第一次使用的朋友记得先注册&…

MySQL 高可用架构

MySQL 是实际生产中最常用的数据库&#xff0c;生产环境数据量极为庞大&#xff0c;对性能和安全要求很高&#xff0c;单机的 MySQL 是远远达不到的&#xff0c;所以必须搭建一个主从复制架构&#xff0c;同时可以基于一些工具实现高可用架构&#xff0c;在此基础上&#xff0c…

制造业工厂如何选择生产管理MES系统?

一、技术架构 虽然绝大多数的用户不会关心MES设计的技术架构&#xff0c;但如果是好的MES系统&#xff0c;需首先必须具备先进的技术支撑&#xff0c;只有先进的开发平台配合上可配置的模块模组&#xff0c;才可快速构建出符合不同用户场景的业务功能。 试想一下&#xff1a;在…

基于C#实现奇偶排序

这篇就从简单一点的一个“奇偶排序”说起吧&#xff0c;不过这个排序还是蛮有意思的&#xff0c;严格来说复杂度是 O(N2)&#xff0c;不过在多核的情况下&#xff0c;可以做到 N2 /(m/2)的效率&#xff0c;这里的 m 就是待排序的个数&#xff0c;当 m100&#xff0c;复杂度为 N…

Project DESFT 白皮书中文版——应用于普惠金融的可信数字凭证解决方案

1. 概述 Project DESFT 是由 Solv 基金会与 zCloak Network 联合设计孵化&#xff0c;以跨境贸易和金融服务为场景的分布式可信数字凭证解决方案&#xff08;Distributed Trusted Digital Credential Solution&#xff09;&#xff0c;项目获得新加坡金管局&#xff08;Monetar…

plt绘制表格

目录 1、绘制简单表格 2、将字体居中 3、为每个表格添加背景 4、添加透明度 5、不显示表格标题 6、将pandas的表格列转行显示 7、关闭表格边框 8、设置表格长宽、字体大小 9、利用色系指定表格颜色 1、绘制简单表格 import pandas as pd import matplotlib.pyplot as…

Linux 命令ln

1什么是链接 ln在Linux中 ln 命令的功能是为某一个文件在另外一个位置建立一个同步的链接&#xff0c;当我们需要在不同的目录&#xff0c;用到相同的文件时&#xff0c;我们不需要在每一个需要的目录下都放一个必须相同的文件&#xff0c;我们只要在某个固定的目录&#xff0…

深入理解main方法-Java

深入理解main方法-Java 一、语法说明二、特别说明三、动态传值 一、语法说明 public static void main(String[] args)main方法是虚拟机调用的java虚拟机需要调用类的main()方法&#xff0c;所以该方法的访问权限必须是publicjava虚拟机在执行main()方法时不必创建对象&#x…

Pyqt5设计师中如何插入图片

问题描述&#xff1a;Pyqt5设计师中如何插入图片。使用Pyqt5做一个示意图界面&#xff0c;是一个”假界面“。 问题解决&#xff1a; 第一步&#xff0c;从Widget Box中拖入一个Label&#xff0c;具体如下图所示。 第二步&#xff0c;在右侧属性编辑器→QLabel→pixmap中选择…

SSRF漏洞防御:黑白名单的编写

SSRF漏洞防御:黑白名单的编写 以pikachu靶场中SSRF(crul)为例 我们可以看到未做任何防御 我们查看源代码 黑名单的制作 思路: 什么内容不能访问 构造代码 $xyarray("file" > "","http" > "","https" > …

销售心理学 如何了解客户的购买心理激发客户购买兴趣

销售心理学 如何了解客户的购买心理激发客户购买兴趣 在销售的世界里&#xff0c;掌握客户的购买心理&#xff0c;如同一把神奇的钥匙&#xff0c;能够解锁客户内心的需求和兴趣。如何巧妙地运用销售心理学&#xff0c;激发客户的购买欲望呢&#xff1f;以下是一些建议&#x…

winform联合halcon读取图像出现问题

1.在Form1.cs和Form.Designer.cs中添加using HalconDotNet&#xff1b; 2. 3.添加Halcon导入.cs的程序 4.注释掉导出文件的主函数&#xff0c;不然会报错。 .

实战|信息泄露

0x01系统初探 通过fofa对大学进行搜索 fofa:host"edu.cn" &amp;&amp; status_code"200"在随意的翻阅查看时&#xff0c;发现访问xxx.edu.cn登录页面会优先访问登录后的页面&#xff0c;再跳转至登录页面。盲猜应该是前端校验&#xff0c;可以通过…

用稳定扩散VAE编码卫星图像

在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 我们使用稳定扩散 VAE 将卫星图像编码到潜在空间中。 然后我们使用 wandb.Table 将潜在变量可视化。 最后&#xff0c;我们将潜伏解码回…