《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.77float 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.mzph.cn/news/175449.shtml

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

相关文章

使用vscode中编写c语言——无法打开 源 文件 “stdlib.h“C/C++(1696)问题

出现这个问题原因如下&#xff1a; 1、没有下载编辑器或者是没有配置好该编辑器的环境变量。 可以通过如下方法检查是否安装并配置好编辑器&#xff1a;打开终端&#xff1a;按winR cmd&#xff0c;然后输入gcc-v&#xff0c;查看是否有mingw64编辑器&#xff0c;如下图是已经…

TUP通信——与多个客户端同时通信

一&#xff0c;概括&#xff1a;可以通过多线程思想每加一个客户端由线程池中的主线程交给一个子线程管理 二&#xff0c;案例 &#xff08;1&#xff09;&#xff0c;线程池 &#xff08;2&#xff09;&#xff0c;服务端 &#xff08;3&#xff09;&#xff0c;客户端

【Qt】QStackedWidget、QRadioButton、QPushButton及布局实现程序首页自动展示功能

效果 在程序启动后&#xff0c;有时不会进入到工作页面&#xff0c;会进入到产品展示页面。 动画如下&#xff1a; 首页展示 页面操作 当不点击时&#xff0c;一秒自动刷新一次&#xff1b;当点击时&#xff0c;会自动跳转到对应页面&#xff1b;点击上一页、下一页、及跳转页…

03、K-means聚类实现步骤与基于K-means聚类的图像压缩

03、K-means聚类实现步骤与基于K-means聚类的图像压缩&#xff08;1&#xff09; K-means聚类实现步骤 开始学习机器学习啦&#xff0c;已经把吴恩达的课全部刷完了&#xff0c;现在开始熟悉一下复现代码。对这个手写数字实部比较感兴趣&#xff0c;作为入门的素材非常合适。…

理解Android无埋点技术

首先什么是无埋点呢&#xff0c;其实所谓无埋点就是开发者无需再对追踪点进行埋码&#xff0c;而是脱离代码&#xff0c;只需面对应用界面圈圈点点即可追加随时生效的事件数据点。 无埋点的好处 其实无埋点并不是完全不用写代码&#xff0c;而是尽可能的少写代码。开发者将SDK集…

零基础学编程轻松学编程,分享一款中文编程工具,编程构件简介

零基础学编程轻松学编程&#xff0c;分享一款中文编程工具&#xff0c;编程构件简介 中文编程开发语言工具编辑区界面截图如上图。 给大家分享一款中文编程工具 零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#…

数据库应用:Ubuntu 20.04 安装MongoDB

目录 一、理论 1.MongoDB 二、实验 1.Ubuntu 20.04 安装MongoDB 三、问题 1.Ubuntu Linux的apt 包管理器更新安装软件报错 2.Ubuntu20.04安装vim报错 3.Ubuntu20.04如何更换阿里源 4.Ubuntu22.04如何更换阿里源 一、理论 1.MongoDB &#xff08;1&#xff09;概念 …

6、Qt使用Log4Qt日志

一、知识点 1、Log4Qt有三部分 logger&#xff1a;负责捕获日志信息 layout&#xff1a;负责使用不同的样式输出日志 appender&#xff1a;负责输出信息到不同的目的地&#xff0c;比如数据库、文件、控制台等等 2、 日志级别如下&#xff0c;从上往下依次递增 ALL&#xff1a;…

css之svg 制作圆及旋转

1.代码 <template><div class"loading-box"><div class"circle-container"><svg width"75" height"75" class"move-left-to-right"><circle cx"37.5" cy"37.5" r"26&…

高端影像仪:打破微小产品测量局限

在现代工业生产中&#xff0c;影像仪以CCD数位影像为基石&#xff0c;将计算机屏幕测量技术与空间几何运算的能力融为一体&#xff0c;可以用于测量微小产品的各种尺寸和形状&#xff0c;为生产过程中的质量控制提供重要的参考依据。 影像仪产品内置高精度光学电动双倍镜头&am…

什么是动态住宅IP?它有什么用途?

随着网络的迅速发展&#xff0c;许多人对代理IP已经有了比较深刻的认识&#xff0c;并且广泛地运用到了各自的业务中&#xff0c;尤其在跨境的相关业务中表现尤其卓越。对于代理IP的类别&#xff0c;也需要根据自己的业务类型具体选择最合适的&#xff0c;那么今天IPFoxy就给大…

网页设计--第5次课后作业

1、快速学习JavaScript的基本知识第1-10章 JavaScript入门 - 绿叶学习网 2、使用所学的知识完成以下练习。需求如下3个&#xff1a; 1&#xff09;点亮灯泡 2&#xff09;将所有的div标签的标签体内容后面加上&#xff1a; very good 3&#xff09;使所有的复选框呈现被选…

【javaWeb】HTTP协议

HTTP (全称为 “超文本传输协议”) 是一种应用非常广泛的应用层协议 HTTP 是一个文本格式的协议. 可以通过 Chrome 开发者工具或者 Fiddler 抓包, 分析 HTTP 请求/响应的细节. 上图是通过Fiddler对访问百度搜索页时抓取的一个http协议的包。 观察抓包结果,可以看到,当前 http…

myAGV 2023 Pi 全新升级!

Introduction 在高速发展的自动化和机器人技术领域&#xff0c;我们的公司一直致力于提供高效、灵活且可靠的轻量级机械臂解决方案。然而&#xff0c;我们也深知&#xff0c;传统的机械臂需要固定在一个地方&#xff0c;这在一定程度上限制了其在空间上的应用范围。为了突破这一…

【论文阅读】ActiveNeRF:通过不确定性估计候选新视图

【论文阅读】ActiveNeRF: Learning where to See with Uncertainty Estimation Abstract1 Introduction3 Background4 NeRF with Uncertainty Estimation5 ActiveNeRF5.1 Prior and Posterior Distribution5.2 Acquisition Function5.3 Optimization and Inference 6 Experimen…

ECharts配置项手册了解及使用

1&#xff1a;点击文档然后选择配置项手册或者&#xff1a;Documentation - Apache ECharts 2&#xff1a;

中间件安全:Weblogic 漏洞.(使用工具可以利用多种类型漏洞)

中间件安全&#xff1a;Weblogic 漏洞.&#xff08;使用工具可以利用多种类型漏洞&#xff09; WebLogic 是美国 Oracle 公司出品的一个 application server&#xff0c;确切的说是一个基于 JAVA EE 架构的中间件&#xff0c;WebLogic 是用于开发、集成、部署和管理大型分布式…

亚信科技AntDB数据库与库瀚存储方案完成兼容性互认证

近日&#xff0c;亚信科技AntDB数据库与苏州库瀚信息科技有限公司自主研发的RISC-V数据库存储解决方案进行了产品兼容测试。经过双方团队的严格测试&#xff0c;亚信科技AntDB数据库与库瀚数据库存储解决方案完全兼容、运行稳定。除高可用性测试外&#xff0c;双方进一步开展TP…

基于springboot-“有光”摄影分享网站系统(2023年☆全网唯一)【附源码|数据库|表结构|万字文档(LW)|技术文档|说明文档】

主要功能 前台登录&#xff1a; 注册用户&#xff1a;用户账号、密码、姓名、手机号、身份证号、性别、邮箱 用户&#xff1a; ①首页、公告资讯展示、图片素材展示、活动展示、视频素材展示、查看更多 ②论坛、发布帖子、活动、活动标题、活动类型、公告资讯、公告标题、公告…

C#,数值计算——插值和外推,径向基函数插值(RBF_interp)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 径向基函数插值 /// Object for radial basis function interpolation using n points in dim /// dimensions.Call constructor once, then interp as many times as desir…