ORB-SLAM2之OpenCV reshape函数

1.reshape函数

1.作用:

在opencv中,reshape函数可以重新调整图像矩阵的行数、列数、通道数。

2.ORB-SLAM2涉及的代码段:

在OREB-SLAM2中frame.cc源文件中UndistortKeyPoints()函数中有这样的一个代码段,其中涉及了reshape函数,代码段如下:

cpp 复制代码
// Undistort points
    mat=mat.reshape(2);
    cv::undistortPoints(mat,mat,mK,mDistCoef,cv::Mat(),mK);
    mat=mat.reshape(1);

解释:该部分代码讲的是对提取的ORB特征点进行去畸变,它先对矩阵进行reshape(2)变成双通道矩阵之后调用undistortPoints()函数对矩阵进行去畸变,在对矩阵进行reshape(1)变成单通道矩阵。

3.reshape函数原型(C++):

cpp 复制代码
cv::Mat cv::Mat::reshape(int channels, int rows=0) const

参数:

1.channels:要将矩阵重塑成的通道数,如果设为0,则表示保持通道数不变,否则则变为设置的通道数。

2.rows(可选):要将矩阵重塑成的行数,如果设为0,则表示保持原有的行数不变,否则则变为设置的行数。

2.实例

1.初始矩阵:

一个2行4列1通道的一个矩阵

代码:

cpp 复制代码
int main()
{
    Mat data = Mat(2, 4, CV_32F);  //设置一个2行4列1通道的一个矩阵
    cout << "行数: " << data.rows << endl;
    cout << "列数: " << data.cols << endl;
    cout << "通道: " << data.channels() << endl;
    return 0;

输出结果:

cpp 复制代码
行数: 2
列数: 4
通道: 1

2.reshape(2);

输出结果:

cpp 复制代码
行数: 2
列数: 2
通道: 2

3.总结:

1.变化的恒等式:rows * cols * channels(前) = rows * cols * channels(后)。

2.利用reshape()函数我们能够改变通道数和行数(可选),列数自动计算。

3.需要注意能否得到所需的通道数,以上述例子为例,若想要三通道则会出错。

4.实践

假设有一个 2 行 4 列的单通道矩阵,其形式如下:

cpp 复制代码
1 2 3 4
5 6 7 8

试计算reshape(2)的形式?答案我放在评论区,做完看看是不是和你的答案是不是一样。

5.结束语

以上就是reshape ()函数的全部内容,希望对大家有帮助,请给我一键三连吧,您的支持是我前进的动力!

相关推荐
格林威3 分钟前
C# 相机Burst模式图像采集:使用相机内存配合OpenCvSharp和Halcon实现短时间的高速采集的方法
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
sunshine22 girl3 分钟前
Angular7,9,学习笔记三 dom操作
笔记·学习·angular
chen<>11 分钟前
C++ 六种 memory_order:从原子性到线程间可见性.md
java·linux·开发语言·c++
一直C13 分钟前
Linux系统编程|进程间通信IPC全套详解(1)(管道、信号)
linux·c语言·开发语言·网络·青少年编程·visual studio code
会周易的程序员21 分钟前
企业私有 AI 算力服务器架构设计:异构四节点 + QUIC 微服务
运维·服务器·c++·人工智能·微服务·架构
春风解人意22 分钟前
从零开始学习嵌入式P28----线程
c语言·学习·算法
m0_7345717624 分钟前
深入理解C++ 类型转换<三>const_cast
开发语言·c++
luj_176825 分钟前
合法避税与投资评估实战指南
c语言·开发语言·网络·经验分享·算法
库玛西31 分钟前
Linux网络编程:HTTP/HTTPS协议核心技术全解析
linux·运维·服务器·网络·c++·http·https
二十雨辰1 小时前
[Java]-JVM面试题
java·开发语言·jvm