OpenCV中reshape()函数详解-改变矩阵的通道数,对矩阵元素进行序列化

news2024/10/5 20:28:30

文章目录

          • 1、函数原型
          • 2、示例
          • 3、结论:

OpenCV中reshape()函数详解-改变矩阵的通道数,对矩阵元素进行序列化

在opencv中reshape函数,既可以改变矩阵的通道数,又可以对矩阵元素进行序列化

1、函数原型
Mat Mat::reshape(
	int cn, 
	int rows=0
) const

参数解释:
cn:通道数,如果设为0,则表示保持通道数不变,否则变为设置的通道数;
rows:矩阵行数,如果设为0,则表示保持原有的行数不变,否则则变为设置的行数;
2、示例

初始化一个矩阵,20行30列1通道

#include <opencv2\opencv.hpp>
#include <iostream>
#include <demo.h>

using namespace cv;
using namespace std;

int main() {
	system("chcp 65001");

	// 初始化一个矩阵,20行30列1通道
	Mat data = Mat(20, 30, CV_32F);
	cout << "行数: " << data.rows << endl;
	cout << "列数: " << data.cols << endl;
	cout << "通道: " << data.channels() << endl;
	cout << endl;
	//(1)通道数不变,将矩阵序列化为1行N列的行向量
	Mat dstRows = data.reshape(0, 1);
	cout << "行数: " << dstRows.rows << endl;
	cout << "列数: " << dstRows.cols << endl;
	cout << "通道: " << dstRows.channels() << endl;
	cout << endl;
	//(2)通道数不变,将矩阵序列化N行1列的列向量
	/**
	* 序列成列向量比行向量要麻烦一些,还得去计算出需要多少行,但我们可以先序列成行向量,再转置;
	* Mat dst = data.reshape(0, 1);      //序列成行向量
	* Mat dst = data.reshape(0, 1).t();  //序列成列向量
	*/
	Mat dstCols = data.reshape(0, data.rows*data.cols);
	cout << "行数: " << dstCols.rows << endl;
	cout << "列数: " << dstCols.cols << endl;
	cout << "通道: " << dstCols.channels() << endl;
	cout << endl;

	//(3)通道数由1变为2,行数不变
	// 注意:从结果可以看出,列数被分出一半,放在第二个通道里去了;如果通道数由1变为3,行数不变,则每通道的列数变为原来的三分之一;需要注意的是,如果行保持不变,改变的通道数一定要能被列数整除,否则会报错
	Mat dstChannel1 = data.reshape(2, 0);
	cout << "行数: " << dstChannel1.rows << endl;
	cout << "列数: " << dstChannel1.cols << endl;
	cout << "通道: " << dstChannel1.channels() << endl;
	cout << endl;
	//(4)通道数由1变为2,行数变为原来的五分之一
	Mat dstChannel2 = data.reshape(2, data.rows/5);
	cout << "行数: " << dstChannel2.rows << endl;
	cout << "列数: " << dstChannel2.cols << endl;
	cout << "通道: " << dstChannel2.channels() << endl;
	cout << endl;

	waitKey();
	destroyAllWindows();
	return 0;
}

在这里插入图片描述

3、结论:
  • 由此可见,不管怎么变,都遵循这样一个等式:变化之前的 rows*cols*channels = 变化之后的 rows*cols*channels,我们只能改变通道数和行数,列数不能改变,它是自动变化的,但是需要注意的是,在变化的时候,要考虑到是否整除的情况,如果改变的数值出现不能整除的情况,就会报错;
  • opencv在序列化的时候是行序列化,即从左到右,从上到下;

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

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

相关文章

echarts_雷达图

目录 雷达图(radar)需求[1] 复制案例[2] 色调统一[3] 配置项实现代码 雷达图(radar) 需求 [1] 复制案例 如上图&#xff0c;先复制一个最简单的雷达图 [2] 色调统一 直角系坐标都是使用xAxis/yAxis配置项&#xff0c;但是雷达图使用的是radar配置项配置坐标系。 配置项注解区…

GoFrame v2.5 版本发布,企业级 Golang 开发框架

大家好啊&#xff0c;GoFrame 框架今天发布了 v2.5.0 正式版本啦&#xff01;&#x1f44f;&#x1f44f;&#x1f44f;&#x1f44f; 本次版本主要是对已有功能组件以及开发工具上的改进工作。其中&#xff0c;开发工具新增了 gf gen ctrl 命令&#xff0c;以规范化定义、开发…

【C#】并行编程实战:使用并发集合

在上一章的并行编程实现里&#xff0c;为了保护资源&#xff0c;我们对共享资源加锁&#xff08;各种同步原语&#xff09;来进行保护&#xff0c;避免多线程同时访问&#xff08;主要是写入&#xff09;。但一般来说&#xff0c;共享资源是一个可以由多个线程读写的集合&#…

AR气象博物馆模拟体验提升青少年认知

国际气象节主要目的是唤起人们对气象工作的重视和热爱。近年来&#xff0c;极端天气频发&#xff0c;人们需要提高警惕&#xff0c;AR气象远程普利用ar技术特有的沉浸式的体感互动&#xff0c;通过模拟演练提升体验者的安全防范意识和求生技巧。 系统结合VR虚拟现实、AR增强现实…

【多模态】1、几种多模态 vision-language 任务和数据集介绍

文章目录 一、Phrase Grounding1.1 概念介绍1.2 常用数据集介绍 二、Referring Expression Comprehension&#xff08;REC&#xff09;2.1 概念介绍2.2 常用数据集介绍 三、Visual Question Answer&#xff08;VQA&#xff09;3.1 概念介绍 四、Image Caption4.1 概念介绍 现在…

MySQL-数据库读写分离(上)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

(学习笔记-TCP连接建立)为什么每次建立TCP连接时,初始化的序列号都要求不一样?

主要原因有两个方面&#xff1a; 为了防止历史报文被下一个相同的四元组的连接接收(主要)为了安全性&#xff0c;防止黑客伪造相同序列号的TCP报文被对方接收 展开第一点&#xff1a; 假设每次建立连接&#xff0c;客户端恶核服务端的初始化序列号都是从0开始&#xff1a; 过程…

Mysql教程(一):Mysql数据模型和SQL语法分析

Mysql教程&#xff08;一&#xff09;&#xff1a;Mysql数据模型和SQL语法分析 1、Mysql数据模型 1.1 关系型数据库&#xff08;RDBMS&#xff09; 概念&#xff1a;建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库。 特点&#xff1a; 使用表存储数…

H5活动营销系统怎么做?H5活动营销系统有哪些优势?

H5营销系统广泛用于各类线下活动场景&#xff0c;即将传统线下活动搬到线上&#xff0c;结合互动和奖励设计&#xff0c;引导用户产生转发、分享等目标行为&#xff0c;从而扩大活动影响力&#xff0c;以获得曝光和转化。因此&#xff0c;h5活动营销系统通常用于拉新促活、刺激…

【LeetCode 75】第三题(1431)拥有最多糖果的孩子

题目: 示例: 分析: 题目是简单题,也确实简单,不过示例给出的解释有些复杂,甚至有些误导.我们只需要遍历得出分配糖果之前的糖果最大值,然后再依次遍历每个孩子拥有的糖果数,若某孩子原有的糖果数加上待分配的所有糖果数大于等于分配前的糖果最大值,则给该孩子对应下标的结果置…

Linux--进程替换(转载)

目录 0.引入 1.替换原理 2.替换函数 execl execv execlp execle execvp execvpe execve 3.调用自定义程序 4.exec函数解释 5.命名理解 0.引入 创建子进程的目的是什么&#xff1f; 就是为了让子进程帮我执行特定的任务 让子进程执行父进程的一部分代码 如果子进程…

深度学习——自编码器AutoEncoder

基本概念 概述 自编码器&#xff08;Autoencoder&#xff09;是一种无监督学习的神经网络模型&#xff0c;用于学习数据的低维表示。它由编码器&#xff08;Encoder&#xff09;和解码器&#xff08;Decoder&#xff09;两部分组成&#xff0c;通过将输入数据压缩到低维编码空…

小程序使用云函数调用第三方api避免域名备案

小程序使用云函数调用第三方api避免域名备案 在小程序开发中&#xff0c;如果需要调用第三方 API&#xff0c;但由于域名备案的限制无法直接在小程序中使用&#xff0c;我们可以利用云函数来解决这个问题。 1. 开通云开发 使用微信开发者工具打开小程序项目&#xff0c;点击…

IDEA 提交git 之后撤回操作

方式一 1.选择提交记录&#xff1b; 2、 右键git然后选择drop commit&#xff1b; 弊端&#xff1a;会将修改的代码全部进行删除操作 打开 IDEA 的 本地历史记录功能&#xff0c;对修改的内容进行复原 方式二&#xff1a; 1、撤回commit 2、选择项目——>右击git——…

ROS-Qt-转CMake编译以及qmake第三方库添加及其他

Qt 开发ROS 界面的方法 方法2 带ui的工作空间配置&#xff08;以ROS节点执行&#xff09; 步骤1 $ mkdir catkin_qt $ cd catkin_qt $ mkdir src $ cd src $ catkin_init_workpasce $ cd .. $ catkin_make $ cd src $ catkin_create_qt_pkg ros_ui roscpp rospy std_msgs $ …

生成式AI时代,亚马逊云科技致力推动技术的普惠,让更多企业受益

当谈及AIGC时&#xff0c; 我们该谈些什么&#xff1f; 生成式AI技术与应用的不断发展&#xff0c;为各个行业都注入了全新的机会与活力。AIGC成为了今年最为激动人心的技术话题。亚马逊云科技也一马当先&#xff0c;在6月27-28日&#xff0c;2023亚马逊云科技中国峰会上分享…

堆的Top-K问题

⭐️ TOP-K问题 TOP-K问题&#xff1a;即求数据结合中前 k k k 个最大的元素或者最小的元素&#xff0c;一般情况数据量都比较大。 比如&#xff1a;专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等。 如果数据量过大&#xff0c;排序的方式就不太可取了。 思路&…

TikTok引流的新玩法,用AdsPower打开新大陆!

做跨境电商的人都知道&#xff0c;天上不会掉流量&#xff0c;想要产品火&#xff0c;就必须要引流。大佬的一个产品动不动就几千几万的观看量&#xff0c;可是自己的产品却无人问津。他们到底怎么做到的呢&#xff1f;很简单&#xff0c;注册AdsPower和TikTok的账号&#xff0…

el-input输入框的那些事

vue3element-plustses6 此帖只为记录开发中遇到的需求&#xff0c;技术问题&#xff0c;坑 1、文本域禁止自由拉伸 1、文本域禁止自由拉伸 el-input有一个枚举类型的resize属性&#xff0c;控制拉伸&#xff0c;‘none’ | ‘both’ | ‘horizontal’ | ‘vertical’&#xf…

找实拍高清视频网站,我推荐这6个

本期推荐6个高清视频素材网站&#xff0c;视频剪辑、自媒体必备&#xff0c;建议收藏~ 菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 菜鸟图库虽然是一个设计网站&#xff0c;但它还有非常丰富的视频和音频素材&#xff0c;视频素材全部都是高清无水印&#xff0…