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与环境支持…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...
