当前位置: 首页 > news >正文

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 lowcdst(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类的矩阵内容输出的各种格式的例子

操作系统&#xff1a;ubuntu22.04OpenCV版本&#xff1a;OpenCV4.9IDE:Visual Studio Code编程语言&#xff1a;C11 功能描述 我们可以这样使用&#xff1a;cv::Mat M(…); cout << M;&#xff0c;直接将矩阵内容输出到控制台。 输出格式支持多种风格&#xff0c;包括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.引言&#xff1a;小孔成像->映射表达式 1. 相机自身的运动如何表征&#xff1f;->外参矩阵E 1.1 旋转 1.2 平移 2. 如何投影到“像平面”&#xff1f;->内参矩阵K 2.1 图像平面坐标转换为像素坐标系 3. 三维到二维的维度是如何丢失的&#xff1f;…...

Android Lint

文章目录 Android Lint概述工作流程Lint 问题问题种类警告严重性检查规则 用命令运行 LintAndroidStudio 使用 Lint忽略 Lint 警告gradle 配置 Lint查找无用资源文件 Android Lint 概述 Lint 是 Android 提供的 代码扫描分析工具&#xff0c;它可以帮助我们发现代码结构/质量…...

【算法刷题 | 动态规划14】6.28(最大子数组和、判断子序列、不同的子序列)

文章目录 35.最大子数组和35.1题目35.2解法&#xff1a;动规35.2.1动规思路35.2.2代码实现 36.判断子序列36.1题目36.2解法&#xff1a;动规36.2.1动规思路36.2.2代码实现 37.不同的子序列37.1题目37.2解法&#xff1a;动规37.2.1动规思路37.2.2代码实现 35.最大子数组和 35.1…...

vue3 vxe-grid列中绑定vxe-switch实现数据更新

1、先上一张图&#xff1a; <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:实现炸列(列转行)以及逆操作(行转列)

目录 列转行行转列 列转行 函数&#xff1a; EXPLODE(ARRAY)&#xff1a;将ARRAY中的每一元素转换为每一行 EXPLODE(MAP)&#xff1a;将MAP中的每个键值对转换为两行&#xff0c;其中一行数据包含键&#xff0c;另一行数据包含值 数据样例&#xff1a; 1、将每天的课程&#…...

MD5算法详解

哈希函数 是一种将任意输入长度转变为固定输出长度的函数。 一些常见哈希函数有&#xff1a;MD5、SHA1、SHA256。 MD5算法 MD5算法是一种消息摘要算法&#xff0c;用于消息认证。 数据存储方式&#xff1a;小段存储。 数据填充 首先对我们明文数据进行处理&#xff0c;使其…...

ES6的代理模式-Proxy

语法 target 要使用 Proxy 包装的目标对象&#xff08;可以是任何类型的对象&#xff0c;包括原生数组&#xff0c;函数&#xff0c;甚至另一个代理handler 一个通常以函数作为属性的对象&#xff0c;用来定制拦截行为 const proxy new Proxy(target, handle)举个例子 <s…...

排序(堆排序、快速排序、归并排序)-->深度剖析(二)

前言 前面介绍了冒泡排序、选择排序、插入排序、希尔排序&#xff0c;作为排序中经常用到了算法&#xff0c;还有堆排序、快速排序、归并排序 堆排序&#xff08;HeaSort&#xff09; 堆排序的概念 堆排序是一种有效的排序算法&#xff0c;它利用了完全二叉树的特性。在C语言…...

七一建党节|热烈庆祝中国共产党成立103周年!

时光荏苒&#xff0c;岁月如梭。 在这热情似火的夏日&#xff0c; 我们迎来了中国共产党成立103周年的重要时刻。 这是一个值得全体中华儿女共同铭记和庆祝的日子&#xff0c; 也是激励我们不断前进的重要时刻。 103年&#xff0c; 风雨兼程&#xff0c;砥砺前行。 从嘉兴…...

Spring Boot应用知识梳理

一.简介 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的工具。它简化了基于 Spring 的应用程序的配置和部署过程&#xff0c;提供了一种快速、便捷的方式来构建独立的、生产级别的 Spring 应用程序。 Spring Boot 的一些主要优点包括&#xff1a; 1. 简化配置…...

Spring中利用重载与静态分派

Spring中利用重载与静态分派 在Java和Spring框架中&#xff0c;重载&#xff08;Overloading&#xff09;和静态分派&#xff08;Static Dispatch&#xff09;是两个非常重要的概念&#xff0c;它们在处理类方法选择和执行过程中扮演着关键角色。本文旨在深入探讨Spring环境下…...

文本三剑客之awk:

文本三剑客awk&#xff1a; grep 查 sed 增删改查 主要&#xff1a;增改 awk 按行取列 awk awk默认的分隔符&#xff1a;空格&#xff0c;tab键&#xff0c;多个空格自动压缩为一个。 awk的工作原理&#xff1a;根据指令信息&#xff0c;逐行的读取文本内容&#xff0c;然…...

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…...

选哪个短剧系统源码好:全面评估与决策指南

在短剧内容创作和分享日益流行的今天&#xff0c;选择合适的短剧系统源码对于构建一个成功的短剧平台至关重要。短剧系统源码不仅关系到平台的稳定性和用户体验&#xff0c;还直接影响到内容创作者和观众的互动质量。本文将提供一份全面的评估指南&#xff0c;帮助您在众多短剧…...

AI时代的软件工程:挑战与改变

人工智能&#xff08;AI&#xff09;正以惊人的速度改变着我们的生活和工作方式。作为与AI关系最为密切的领域之一&#xff0c;软件工程正经历着深刻的转变。 1 软件工程的演变 软件工程的起源 软件工程&#xff08;Software Engineering&#xff09;是关于如何系统化、规范化地…...

Zuul介绍

Zuul 是 Netflix 开源的一个云平台网络层代理&#xff0c;它主要用于路由、负载均衡、中间件通信和动态路由。Zuul 本质上是一个基于 JVM 的网关&#xff0c;它提供了以下功能&#xff1a; 1.路由&#xff1a;Zuul 允许客户端和服务器之间的所有入站和出站请求通过一个中心化的…...

7-1作业

1.实验目的&#xff1a;完成字符收发 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安装、配置详细步骤

一、环境及版本介绍 操作系统&#xff1a; Windows 10 软件版本&#xff1a; elasticsearch-7.17.22、kibana-7.17.22、IK-7.17.22 开发环境选择软件版本应提前考虑正式系统环境&#xff0c;否则会产生软件与服务器环境不兼容的问题出现&#xff0c;ElasticSearch与环境支持…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...