1. Mat::reshape( )

只是在逻辑上改变矩阵的行列数或者通道数,没有任何的数据的复制,也不会增减任何数据,因此这是一个O(1)的操作,它要求矩阵是连续的。

C++: Mat Mat::reshape(int cn, int rows=0 const)

cn:目标通道数,如果是0则保持和原通道数一致;

rows:目标行数,同上是0则保持不变;

改变后的矩阵要满足 rows*cols*channels  跟原数组相等,所以如果原来矩阵是单通道3*3的,调用Reshape(0,2)是会报错的,因为3*3*1不能被2*1整除。

应用:在提取特征时,往往需要把特征矩阵变成一个行向量

[cpp] view plaincopy
  1. return feature.reshape(0,1).clone();

2. Mat::Resize( )

是改变矩阵的行数,会引起矩阵的重新分配。

C++: void Mat::resize(size_t sz)

C++: void Mat::resize(size_t sz, const Scalar& s)

sz:目标行数

s :如果sz大于原来函数,可以选择填充值

3.cv::resize( )

这个是通过插值的方式来改变图像的尺寸,貌似不支持int型的元素,uchar,float和double都可以。

C++: void resize( InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )

dst的尺寸是由dsize,fx和fy决定的,与dst本身的type和size都没有关系。

当size不为0时,可以直接确定dst的大小,这时的fx和fy可以设为0;

当size为0时,fx代表宽度(列)的缩放系数,fy代表高度(行)的缩放系数,这时dsize可以写成Size(),它将默认设置为

dsize = Size(round(fx*src.cols), round(fy*src.rows));

举例说明一下:

#include <opencv2\opencv.hpp>  
using namespace cv;  
void main()  
{

cv::Mat M = (cv::Mat_<uchar>(2,3) << 1,2,3,4,5,6);//原则:先行后列
       std::cout<<"原矩阵:\n"<<M<<std::endl;
       std::cout<<"mat::reshape:\n"<<M.reshape(0,1)<<std::endl;
       M.resize(2);
       std::cout<<"mat::resize:\n"<<M<<std::endl;
       cv::resize( M,M, Size(2,4) );
       std::cout<<"cv::resize:\n"<<M<<std::endl;

}

结果:

[ 1, 2, 3;

4, 5, 6]

mat::reshape:

[ 1, 2, 3, 4, 5, 6]

mat::resize:

[ 1, 2, 3;

4, 5, 6]

cv::resize:

[ 1, 3;

2, 3;

3, 5;

4, 6]

OpenCV Resize Reshape相关推荐

  1. matlab中imresize函数的用法,为何 MATLAB imresize 函数和 OpenCV resize 函数结果不同

    为何 MATLAB imresize 函数和 OpenCV resize 函数结果不同?今年 4 月,我在依照 MATLAB 代码自己写一个卷积神经网络 C++ 实现的过程中,就发现了这个问题,不过那 ...

  2. matlab运行dxcv,MATLAB imresize 函数和 OpenCV resize 函数结果不同

    为何 MATLAB imresize 函数和 OpenCV resize 函数结果不同?今年 4 月,我在依照 MATLAB 代码自己写一个卷积神经网络 C++ 实现的过程中,就发现了这个问题,不过那 ...

  3. matlab imresize算法详解,为何 MATLAB imresize 函数和 OpenCV resize 函数结果不同

    为何 MATLAB imresize 函数和 OpenCV resize 函数结果不同?今年 4 月,我在依照 MATLAB 代码自己写一个卷积神经网络 C++ 实现的过程中,就发现了这个问题,不过那 ...

  4. OpenCV resize函数源码解析——加速方法

    相信大家应该经常会用到OpenCV中的函数resize(),当我们想放大或者缩小图像的时候,会用到这个函数进行图像缩放,其中最核心的便是对图像的像素进行插值处理. 这里的插值interpolation ...

  5. opencv resize (C/C++/Python)

    考: http://www.OpenCV.org.cn/opencvdoc/2.3.2/html/modules/imgproc/doc/geometric_transformations.html? ...

  6. opencv resize

    OpenCV(3)-图像resize 在图像处理过程中,有时需要把图像调整到同样大小,便于处理,这时需要用到图像resize() 原函数 void resize(InputArray src, Out ...

  7. OpenCV resize 图像缩放

    ::返回OpenCV算子速查表 图像缩放 resize 1. 函数定义 2. 例程 1. 函数定义 OpenCV官方文档 resize resize(InputArray src,OutputArra ...

  8. OpenCV resize 改变图片大小,4种方式原理对比

    微信:18233275213 本文共总结了OpenCV提供的4种resize图片的方法: 一.最近邻插值法 INTER_NEAREST 二.双线性插值(默认设置) INTER_LINEAR 一.最近邻 ...

  9. python opencv resize函数_python cv2.resize函数high和width注意事项说明

    在opencv中获取图片的尺寸的方法是: import cv2 img = cv2.imread(path) img.shape 返回的是三维数组(high, width, 3),当我们需要对图像进行 ...

最新文章

  1. SqlParameter的作用与用法
  2. Google面试题——及答案
  3. [Windows驱动开发](三)基础知识——驱动例程
  4. transferto 文件不存在_文件上传时,MultipartFile.transferTo() 方法报 FileNotFoundException...
  5. 在iView中动态创建表格
  6. jpa 人大金仓数据库方言_KingBaseV8人大金仓数据库 | 大小写敏感问题
  7. 【CV】图像恢复(去噪,去模糊,超分)模型 DPDNN 论文笔记
  8. 漫网漫画APP源码包含后台完整版
  9. 帆软所有销量为0的显示为空值_fineReport网络报表工具使用总结
  10. 北京城建:建筑业龙头的数字化修炼之路
  11. 打开Excel新窗口的方法
  12. 【AVS】AVS2编码器开源啦:xAVS2
  13. spring boot 尚桂谷学习笔记05 ---Web
  14. UltraEdit最新版v27软件下载 程序员必用高级文本编辑器
  15. SWFObject参数,SWFObject使用方法
  16. EasyExcel 中文文档
  17. Android:国家气象局提供的天气预报接口(完整Json接口)
  18. 普林斯顿 计算机专业排名,普林斯顿大学计算机排名2020年全球超级有用干货
  19. vue3状态管理工具 pinia的使用
  20. 2020-web前端-JavaScript基础笔记

热门文章

  1. Qt中使用C++的方式
  2. php 服务器运行状态,检查服务器各种服务的运行状态
  3. java计算24小时之内_java的系统时间,怎么计算从现在到凌晨还剩下多少时间?
  4. 平行志愿计算机检索原理,通俗图解平行志愿,让你明白平行志愿检索规则
  5. 查看mysql整个库的数据大小_查看mysql数据库容量大小
  6. fmt打印不显示 go_golang打印输出fmt和log
  7. 计算机操作员高级理论试题答案,计算机操作员高级理论试题答案1.doc
  8. linux 新用户 界面登录,如何在Linux系统登录界面加入个性化提示信息
  9. mysql中两种备份方法的优缺点_Mysql两种存储引擎的优缺点
  10. 虚拟机做linux服务器,用 VirtualBox 的 linux 虚拟机做服务器