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

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像素值

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Springboot日志-logback

logback-spring.xml的配置项 共有一个父标签、两种属性、三个节点: 一个父标签&#xff1a;configuration 两种属性&#xff1a;contextName和property 三个节点&#xff1a;appender、root、logger 日志级别 日志级别从低到高分为TRACE < DEBUG < INFO < WARN &…

RabbitMQ工作模式2 整合springboot 和MQ高级特性

RabbitMQ工作模式 1.路由模式 创建交换机 , 连接队列 (生产者) public class MyTestExDirect {Testpublic void bbb() throws IOException, TimeoutException {ConnectionFactory connectionFactory new ConnectionFactory();//连接mqconnectionFactory.setUsername("…

ZYNQ PL 中断请求

1 中断概念 中断学习 2 ZYNQ 中断框图 上图为 zynq 中断分布框图。可以看到部分 PL 到 PS 部分的中断&#xff0c;经过中断控制分配器&#xff08;ICD&#xff09;&#xff0c; 同时进入 CPU1 和 CPU0。查询下面表格&#xff0c;可以看到 PL 到 PS 部分一共有 20 个中断可以使…

qt国际化多语言

vs + qt 方法 一 (1)生成.pro文件 如果报错: cannot find any qt projects to export 则执行如下: 然后重新生成 pro文件。 (2)生成ts文件 (方法1)在项目文件(xxx.pro) 文件添加: TRANSLATIONS += en.ts zh_CN.ts 然后打开cmd命令,进入项目目录,执行 l…

C++中的new、operator new与placement new

new operator new operator是我们常用的new。 new 和 delete 是用来在 堆上申请和释放空间的 &#xff0c;是 C 定义的 关键字&#xff0c;和 sizeof 一样。 实际 new / delete 和 malloc / free 最大的区别是&#xff0c;前者对于 自定义类型 除了可以开辟空间&#xff0c;…

C语言基础篇5:指针(二)

接上篇&#xff1a;C语言基础篇5&#xff1a;指针(一) 4 指针作为函数参数 4.1 指针变量作为函数的参数 指针型变量可以作为函数的参数&#xff0c;使用指针作为函数的参数是将函数的参数声明为一个指针&#xff0c;前面提到当数组作为函数的实参时&#xff0c;值传递数组的地址…

其利天下技术总监冯建武受邀出席“2023年电子工程师大会”并作主题演讲

2023年11月23日&#xff0c;由华秋电子发烧友主办的“2023年电子工程师大会暨第三届社区年度颁奖活动”在深圳新一代产业园成功举行。本次年度颁奖活动邀请了高校教授、企业高管、行业专家、资深电子工程师等共300多人出席。聚焦“电机驱动技术”、“开源硬件”、“OpenHarmony…

C#学习-8课时

P10 输入输出程序编写 相同类型的可以直接相加&#xff1b; cwtabtabconsole.Writeline(); using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace C_8_1 { class Program { s…

【腾讯云云上实验室】用向量数据库—实践相亲社交应用

快速入口 &#x1f449;向量数据库_大模型知识库_向量数据存储_向量数据检索- 腾讯云 (tencent.com) 文章目录 前言1. 向量数据库概念及原理1.1 向量数据库概念1.2 向量数据库核心原理1.3 向量数据库优缺点1.4 向量数据库与传统数据库的区别 2. 腾讯云向量数据库的基本特性及优…

黑马程序员索引学习笔记

文章目录 索引的分类从索引字段特性从物理存储从数据结构组成索引的字段个数 InnoDB主键索的Btree高度为多高呢?explain执行计划最左匹配原则索引失效情况SQL提示覆盖索引、回表查询前缀索引索引设计原则 索引的分类 从索引字段特性 主键索引、唯一索引、常规索引、全文索引…

RNN 网络结构及训练过程简介

本文通过整理李宏毅老师的机器学习教程的内容&#xff0c;简要介绍 RNN&#xff08;recurrent neural network&#xff09;的网络结构及训练过程。 RNN 网络结构, 李宏毅 RNN RNN 的特点在于存储功能&#xff0c;即可以记忆前面时刻的信息。 最简单的 RNN 结构如下&#xf…

切换服务器上自己用户目录下的 conda 环境和一个外部的 Conda 环境

如果我们有自己的 Miniconda 安装和一个外部的 Conda 环境&#xff08;比如一个全局安装的 Anaconda&#xff09;&#xff0c;我们可以通过修改 shell 环境来切换使用它们。这通常涉及到更改 PATH 环境变量&#xff0c;以便指向你想要使用的 Conda 安装的可执行文件&#xff1a…

CSS新手入门笔记整理:CSS基本选择器

id属性 id属性具有唯一性&#xff0c;也就是说&#xff0c;在一个页面中相同的id只能出现一次。在不同的页面中&#xff0c;可以出现两个id相同的元素。 语法 <div id"text"> ...... </div> class属性 class&#xff0c;顾名思义&#xff0c;就是“类…

C语言每日一题(37)两数相加

力扣网 2 两数相加 题目描述 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&a…

【Linux】第二十一站:文件(一)

文章目录 一、共识原理二、C系列文件接口三、从C过渡到系统&#xff1a;文件系统调用四、访问文件的本质 一、共识原理 文件 内容 属性 文件分为打开的文件 和 没打开的文件 打开的文件&#xff1a;是谁打开的&#xff1f;是进程&#xff01;----所以研究打开的文件本质是研…

Redis之C语言底层数据结构笔记

目录 动态字符串SDS Dict ZipList QuickList ​ SkipList 动态字符串SDS Dict ZipList QuickList SkipList

SAP创建ODATA服务-Structure

SAP创建ODATA服务-Structure 1、创建数据字典 进入se11创建透明表ZRICO_USR,并创建对应字段 2、创建OData service 首先创建Gateway service project&#xff0c;事务码&#xff1a;SEGW&#xff0c;点击Create Project 按钮 Gateway service Project分四个部分&#xff1a…

ubuntu20.04安装tensorRT流程梳理

目标&#xff1a;先跑demo&#xff0c;再学习源码 step1, 提前准备好CUDA环境 安装CUDA&#xff0c;cuDNN 注意&#xff0c;CUDA&#xff0c;cuDNN需要去官网下载.run和tar文件安装&#xff0c;否则在下面step4 make命令会报找不到cuda等的错误&#xff0c;具体安装教程网上…

COMP2121 Discrete Mathematics

COMP2121 Discrete Mathematics 需要可WeChat: zh6-86

Unity 打印每次代码保存耗时

unity每次编辑代码的时候&#xff0c;都需要保存&#xff0c;unity右下角的小圆圈总是转个不停&#xff0c;那么每次编辑代码后&#xff0c;unity到底需要多久时间呢&#xff0c;下面就有代码可以获取 保存时间。 using UnityEngine; using UnityEditor; using UnityEditor.Com…