cv::Mat类的矩阵内容输出的各种格式的例子
- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
功能描述
我们可以这样使用:cv::Mat M(…); cout << M;,直接将矩阵内容输出到控制台。
输出格式支持多种风格,包括OpenCV的原生格式、MATLAB风格、Python风格、NumPy风格、CSV格式以及C语言风格等。
用到的函数
Mat::eye
cv::Mat::eye 是一个静态方法,用于创建一个单位矩阵(对角线上的元素为1,其余位置为0)的 cv::Mat 对象。这个方法使得初始化一个单位矩阵变得简单快捷。
原型
cv::Mat eye(int rows, int cols, int type = CV_64F);
参数
- rows:指定创建矩阵的行数。
- cols:指定创建矩阵的列数。
- type:可选参数,指定了矩阵的数据类型,默认为 CV_64F,即64位浮点型。你可以根据需要选择其他类型,如 CV_8U 表示无符号8位整型,CV_32F 表示32位浮点型等。
示例
cv::Mat identityMatrix = cv::Mat::eye(3, 3, CV_32F);
这段代码将创建一个3x3的浮点型单位矩阵。
函数Mat::Mat( int rows, int cols, int type )
使用 cv::Mat 的构造函数来初始化一个矩阵
原型
cv::Mat::Mat(int rows, int cols, int type);
参数
- int rows: 指定矩阵的行数。这是一个整数值,表示矩阵的高度。
- int cols: 指定矩阵的列数。同样是一个整数值,表示矩阵的宽度。
- int type: 确定矩阵中元素的数据类型以及(对于多通道数组而言)通道数。这个参数是关键,因为它定义了矩阵中每个元素是如何存储的。类型编码遵循OpenCV的类型系统,常见的类型有:
CV_8U: 无符号8位整数(uchar,0-255)
CV_8S: 有符号8位整数(char,-128到127)
CV_16U: 无符号16位整数
CV_16S: 有符号16位整数
CV_32S: 有符号32位整数
CV_32F: 32位浮点数(float)
CV_64F: 64位双精度浮点数(double)
对于多通道数组(如RGB图像),在上述类型后面加上"Cn",其中n表示通道数。例如,CV_8UC3 表示无符号8位,3通道(常用作BGR图像)。因此,type 参数不仅指定了数据类型,还隐含了数组是否为多通道以及通道数。
randu函数
生成单个均匀分布的随机数或随机数数组。
此非模板函数变体将矩阵dst填充来自指定范围的均匀分布随机数:
low c ≤ dst ( I ) c < high c \texttt{low} _c \leq \texttt{dst} (I)_c < \texttt{high} _c lowc≤dst(I)c<highc
参数
-参数 dst 输出随机数数组;该数组必须预先分配.
-参数 low 生成随机数的包含下限.
-参数 high 生成随机数的不包含上限.
代码示例
/***该程序演示了cv::Mat类的串行输出功能,*也就是说,你现在可以这样使用:cv::Mat M(...); cout << M;,直接将矩阵内容输出到控制台。*输出格式支持多种风格,包括OpenCV的原生格式、MATLAB风格、Python风格、NumPy风格、CSV格式以及C语言风格等。**/#include "opencv2/core.hpp"
#include <iostream>
using namespace std;
using namespace cv;int main( int argc, char** argv )
{Mat I = Mat::eye( 4, 4, CV_64F );I.at< double >( 1, 1 ) = CV_PI;cout << "I = \n" << I << ";" << endl << endl;Mat r = Mat( 10, 3, CV_8UC3 );randu( r, Scalar::all( 0 ), Scalar::all( 255 ) );cout << "r (默认风格) = \n" << r << ";" << endl << endl;cout << "r (matlab风格) = \n" << format( r, Formatter::FMT_MATLAB ) << ";" << endl << endl;cout << "r (python风格) = \n" << format( r, Formatter::FMT_PYTHON ) << ";" << endl << endl;cout << "r (numpy风格) = \n" << format( r, Formatter::FMT_NUMPY ) << ";" << endl << endl;cout << "r (csv风格) = \n" << format( r, Formatter::FMT_CSV ) << ";" << endl << endl;cout << "r (c风格) = \n" << format( r, Formatter::FMT_C ) << ";" << endl << endl;Point2f p( 5, 1 );cout << "p = " << p << ";" << endl;Point3f p3f( 2, 6, 7 );cout << "p3f = " << p3f << ";" << endl;vector< float > v;v.push_back( 1 );v.push_back( 2 );v.push_back( 3 );cout << "shortvec = " << Mat( v ) << endl;vector< Point2f > points( 20 );for ( size_t i = 0; i < points.size(); ++i )points[ i ] = Point2f( ( float )( i * 5 ), ( float )( i % 7 ) );cout << "points = " << points << ";" << endl;return 0;
}
运行结果
I =
[1, 0, 0, 0;0, 3.141592653589793, 0, 0;0, 0, 1, 0;0, 0, 0, 1];r (默认风格) =
[ 91, 2, 79, 179, 52, 205, 236, 8, 181;239, 26, 248, 207, 218, 45, 183, 158, 101;102, 18, 118, 68, 210, 139, 198, 207, 211;181, 162, 197, 191, 196, 40, 7, 243, 230;45, 6, 48, 173, 242, 125, 175, 90, 63;90, 22, 112, 221, 167, 224, 113, 208, 123;214, 35, 229, 6, 143, 138, 98, 81, 118;187, 167, 140, 218, 178, 23, 43, 133, 154;150, 76, 101, 8, 38, 238, 84, 47, 7;117, 246, 163, 237, 69, 129, 60, 101, 41];r (matlab风格) =
(:, :, 1) = 91, 179, 236;
239, 207, 183;
102, 68, 198;
181, 191, 7;45, 173, 175;90, 221, 113;
214, 6, 98;
187, 218, 43;
150, 8, 84;
117, 237, 60
(:, :, 2) = 2, 52, 8;26, 218, 158;18, 210, 207;
162, 196, 243;6, 242, 90;22, 167, 208;35, 143, 81;
167, 178, 133;76, 38, 47;
246, 69, 101
(:, :, 3) = 79, 205, 181;
248, 45, 101;
118, 139, 211;
197, 40, 230;48, 125, 63;
112, 224, 123;
229, 138, 118;
140, 23, 154;
101, 238, 7;
163, 129, 41;r (python风格) =
[[[ 91, 2, 79], [179, 52, 205], [236, 8, 181]],[[239, 26, 248], [207, 218, 45], [183, 158, 101]],[[102, 18, 118], [ 68, 210, 139], [198, 207, 211]],[[181, 162, 197], [191, 196, 40], [ 7, 243, 230]],[[ 45, 6, 48], [173, 242, 125], [175, 90, 63]],[[ 90, 22, 112], [221, 167, 224], [113, 208, 123]],[[214, 35, 229], [ 6, 143, 138], [ 98, 81, 118]],[[187, 167, 140], [218, 178, 23], [ 43, 133, 154]],[[150, 76, 101], [ 8, 38, 238], [ 84, 47, 7]],[[117, 246, 163], [237, 69, 129], [ 60, 101, 41]]];r (numpy风格) =
array([[[ 91, 2, 79], [179, 52, 205], [236, 8, 181]],[[239, 26, 248], [207, 218, 45], [183, 158, 101]],[[102, 18, 118], [ 68, 210, 139], [198, 207, 211]],[[181, 162, 197], [191, 196, 40], [ 7, 243, 230]],[[ 45, 6, 48], [173, 242, 125], [175, 90, 63]],[[ 90, 22, 112], [221, 167, 224], [113, 208, 123]],[[214, 35, 229], [ 6, 143, 138], [ 98, 81, 118]],[[187, 167, 140], [218, 178, 23], [ 43, 133, 154]],[[150, 76, 101], [ 8, 38, 238], [ 84, 47, 7]],[[117, 246, 163], [237, 69, 129], [ 60, 101, 41]]], dtype='uint8');r (csv风格) = 91, 2, 79, 179, 52, 205, 236, 8, 181
239, 26, 248, 207, 218, 45, 183, 158, 101
102, 18, 118, 68, 210, 139, 198, 207, 211
181, 162, 197, 191, 196, 40, 7, 243, 23045, 6, 48, 173, 242, 125, 175, 90, 6390, 22, 112, 221, 167, 224, 113, 208, 123
214, 35, 229, 6, 143, 138, 98, 81, 118
187, 167, 140, 218, 178, 23, 43, 133, 154
150, 76, 101, 8, 38, 238, 84, 47, 7
117, 246, 163, 237, 69, 129, 60, 101, 41
;r (c风格) =
{ 91, 2, 79, 179, 52, 205, 236, 8, 181,239, 26, 248, 207, 218, 45, 183, 158, 101,102, 18, 118, 68, 210, 139, 198, 207, 211,181, 162, 197, 191, 196, 40, 7, 243, 230,45, 6, 48, 173, 242, 125, 175, 90, 63,90, 22, 112, 221, 167, 224, 113, 208, 123,214, 35, 229, 6, 143, 138, 98, 81, 118,187, 167, 140, 218, 178, 23, 43, 133, 154,150, 76, 101, 8, 38, 238, 84, 47, 7,117, 246, 163, 237, 69, 129, 60, 101, 41};p = [5, 1];
p3f = [2, 6, 7];
shortvec = [1;2;3]
points = [0, 0;5, 1;10, 2;15, 3;20, 4;25, 5;30, 6;35, 0;40, 1;45, 2;50, 3;55, 4;60, 5;65, 6;70, 0;75, 1;80, 2;85, 3;90, 4;95, 5];相关文章:
cv::Mat类的矩阵内容输出的各种格式的例子
操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:Visual Studio Code编程语言:C11 功能描述 我们可以这样使用:cv::Mat M(…); cout << M;,直接将矩阵内容输出到控制台。 输出格式支持多种风格,包括O…...
Redis--注册中心集群 Cluster 集群-单服务器
与“多服务器集群”一致需要创建redis配置模板 参照以下链接 CSDN 创建redis容器 node01服务器上创建容器 docker run -d --name redis-6381 --net host --privilegedtrue \ -v /soft/redis-cluster/6381/conf/redis.conf:/etc/redis/redis.conf \ -v /soft/redis-cluster/6…...
CV01_相机成像原理与坐标系之间的转换
目录 0.引言:小孔成像->映射表达式 1. 相机自身的运动如何表征?->外参矩阵E 1.1 旋转 1.2 平移 2. 如何投影到“像平面”?->内参矩阵K 2.1 图像平面坐标转换为像素坐标系 3. 三维到二维的维度是如何丢失的?…...
Android Lint
文章目录 Android Lint概述工作流程Lint 问题问题种类警告严重性检查规则 用命令运行 LintAndroidStudio 使用 Lint忽略 Lint 警告gradle 配置 Lint查找无用资源文件 Android Lint 概述 Lint 是 Android 提供的 代码扫描分析工具,它可以帮助我们发现代码结构/质量…...
【算法刷题 | 动态规划14】6.28(最大子数组和、判断子序列、不同的子序列)
文章目录 35.最大子数组和35.1题目35.2解法:动规35.2.1动规思路35.2.2代码实现 36.判断子序列36.1题目36.2解法:动规36.2.1动规思路36.2.2代码实现 37.不同的子序列37.1题目37.2解法:动规37.2.1动规思路37.2.2代码实现 35.最大子数组和 35.1…...
vue3 vxe-grid列中绑定vxe-switch实现数据更新
1、先上一张图: <template #valueSlot"{ row }"><vxe-switch :value"getV(row.svalue)" change"changeSwitch(row)" /></template>function getV(value){return value 1;};function changeSwitch(row) {console.l…...
Hive SQL:实现炸列(列转行)以及逆操作(行转列)
目录 列转行行转列 列转行 函数: EXPLODE(ARRAY):将ARRAY中的每一元素转换为每一行 EXPLODE(MAP):将MAP中的每个键值对转换为两行,其中一行数据包含键,另一行数据包含值 数据样例: 1、将每天的课程&#…...
MD5算法详解
哈希函数 是一种将任意输入长度转变为固定输出长度的函数。 一些常见哈希函数有:MD5、SHA1、SHA256。 MD5算法 MD5算法是一种消息摘要算法,用于消息认证。 数据存储方式:小段存储。 数据填充 首先对我们明文数据进行处理,使其…...
ES6的代理模式-Proxy
语法 target 要使用 Proxy 包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理handler 一个通常以函数作为属性的对象,用来定制拦截行为 const proxy new Proxy(target, handle)举个例子 <s…...
排序(堆排序、快速排序、归并排序)-->深度剖析(二)
前言 前面介绍了冒泡排序、选择排序、插入排序、希尔排序,作为排序中经常用到了算法,还有堆排序、快速排序、归并排序 堆排序(HeaSort) 堆排序的概念 堆排序是一种有效的排序算法,它利用了完全二叉树的特性。在C语言…...
七一建党节|热烈庆祝中国共产党成立103周年!
时光荏苒,岁月如梭。 在这热情似火的夏日, 我们迎来了中国共产党成立103周年的重要时刻。 这是一个值得全体中华儿女共同铭记和庆祝的日子, 也是激励我们不断前进的重要时刻。 103年, 风雨兼程,砥砺前行。 从嘉兴…...
Spring Boot应用知识梳理
一.简介 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的工具。它简化了基于 Spring 的应用程序的配置和部署过程,提供了一种快速、便捷的方式来构建独立的、生产级别的 Spring 应用程序。 Spring Boot 的一些主要优点包括: 1. 简化配置…...
Spring中利用重载与静态分派
Spring中利用重载与静态分派 在Java和Spring框架中,重载(Overloading)和静态分派(Static Dispatch)是两个非常重要的概念,它们在处理类方法选择和执行过程中扮演着关键角色。本文旨在深入探讨Spring环境下…...
文本三剑客之awk:
文本三剑客awk: grep 查 sed 增删改查 主要:增改 awk 按行取列 awk awk默认的分隔符:空格,tab键,多个空格自动压缩为一个。 awk的工作原理:根据指令信息,逐行的读取文本内容,然…...
SpringSecurity-授权示例
用户基于权限进行授权 定义用户与权限 authorities()。 package com.cms.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.core.userdetails.User; import…...
选哪个短剧系统源码好:全面评估与决策指南
在短剧内容创作和分享日益流行的今天,选择合适的短剧系统源码对于构建一个成功的短剧平台至关重要。短剧系统源码不仅关系到平台的稳定性和用户体验,还直接影响到内容创作者和观众的互动质量。本文将提供一份全面的评估指南,帮助您在众多短剧…...
AI时代的软件工程:挑战与改变
人工智能(AI)正以惊人的速度改变着我们的生活和工作方式。作为与AI关系最为密切的领域之一,软件工程正经历着深刻的转变。 1 软件工程的演变 软件工程的起源 软件工程(Software Engineering)是关于如何系统化、规范化地…...
Zuul介绍
Zuul 是 Netflix 开源的一个云平台网络层代理,它主要用于路由、负载均衡、中间件通信和动态路由。Zuul 本质上是一个基于 JVM 的网关,它提供了以下功能: 1.路由:Zuul 允许客户端和服务器之间的所有入站和出站请求通过一个中心化的…...
7-1作业
1.实验目的:完成字符收发 led.h #ifndef __GPIO_H__ #define __GPIO_H__#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h"//RCC,GPIO,UART初始化 void init();//字符数据发送 void set_tt…...
ElasticSearch安装、配置详细步骤
一、环境及版本介绍 操作系统: Windows 10 软件版本: elasticsearch-7.17.22、kibana-7.17.22、IK-7.17.22 开发环境选择软件版本应提前考虑正式系统环境,否则会产生软件与服务器环境不兼容的问题出现,ElasticSearch与环境支持…...
TensorRT量化实战:动态范围计算中的熵校准与直方图优化
1. TensorRT量化中的动态范围计算基础 在模型部署的工程实践中,量化技术是提升推理效率的关键手段。TensorRT作为业界领先的推理优化框架,其INT8量化功能可以将模型体积压缩至原来的1/4,同时保持较高的推理精度。但量化过程中最关键的挑战就是…...
从理论到实践:Ceres、G2O与GTSAM在位姿图优化中的核心实现与对比
1. 位姿图优化:从理论到代码的完整视角 想象你正在搭建一个室内扫地机器人,它需要同时完成两件事:构建房间地图(Mapping)和确定自身位置(Localization)。这就是典型的SLAM问题。而位姿图优化&am…...
Motorola LS2208条码扫描器USB接口模式解析与Python数据采集实战
1. 项目概述:从“扫码枪”到数据采集终端在仓库、快递站或者超市收银台,我们每天都能看到工作人员拿着一个像手枪一样的东西,“嘀”一声,商品信息就录入了系统。这个设备就是条码扫描器,很多人习惯叫它“扫码枪”。你可…...
AI驱动GitHub仓库分析:从数据到洞察的工程实践
1. 项目概述:一个面向开发者的AI驱动GitHub分析工具最近在GitHub上发现一个挺有意思的项目,叫instagit,来自InstalabsAI这个组织。乍一看名字,可能会联想到Instagram或者某种社交工具,但实际上,它是一个完全…...
AB下载管理器终极指南:高效管理你的下载任务
AB下载管理器终极指南:高效管理你的下载任务 【免费下载链接】ab-download-manager A Download Manager that speeds up your downloads 项目地址: https://gitcode.com/GitHub_Trending/ab/ab-download-manager AB下载管理器是一款基于Kotlin开发的开源跨平…...
可编程投币器集成指南:从硬件连接到游戏积分映射
1. 项目概述:从“投币”到“积分”的硬件魔法“Insert Coin”——对于任何一个经历过街机黄金年代的玩家来说,这三个字背后所承载的,远不止是启动游戏的指令,更是一种充满仪式感的期待。如今,我们大多通过模拟器上的一…...
构建AI智能体调度平台:从微服务架构到工程实践
1. 项目概述:一个面向智能体的“Airbnb”式调度平台最近在折腾AI智能体(Agent)相关的项目,发现一个挺有意思的现象:大家把模型、工具链、工作流都搭好了,但真要让多个智能体协同工作,或者把智能…...
Xenia Canary架构解密:如何用即时编译技术复活Xbox 360游戏生态
Xenia Canary架构解密:如何用即时编译技术复活Xbox 360游戏生态 【免费下载链接】xenia-canary Xbox 360 Emulator Research Project 项目地址: https://gitcode.com/gh_mirrors/xe/xenia-canary 在游戏仿真技术领域,突破硬件壁垒实现跨平台游戏…...
工业物联网数据上云省钱实战:边缘预处理与协议瘦身详解
背景与问题 工业物联网项目落地时,带宽费用往往是降本增效的第一道坎。几百台设备每秒上传数据,每月带宽费轻易上万,其中大量数据属于冗余“常态数据”。本文记录一套低成本方案:通过边缘计算网关做数据清洗与协议压缩,…...
树莓派Pico舵机控制库picoclaw:从PWM原理到多舵机机器人应用
1. 项目概述:一个为树莓派Pico量身打造的舵机控制库如果你玩过树莓派Pico,并且尝试过用它来控制舵机,那你大概率会遇到一个头疼的问题:Pico的MicroPython固件本身并没有内置专门的舵机控制库。这意味着你需要自己动手,…...
