OpenCV中的Resize和Reshape都是改变一个矩阵的形状,那它们有哪些不同点呢?
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整除。

本文探讨了OpenCV中的Resize和Reshape两个函数,重点解析它们在改变矩阵形状时的不同点。Mat::reshape仅逻辑上改变矩阵的通道和行数,不涉及数据复制,要求矩阵连续;Mat::resize会改变矩阵行数,导致内存重新分配;cv::resize通过插值方法调整图像尺寸,适用于uchar、float和double类型,但不支持int类型元素。
最低0.47元/天 解锁文章
6796

被折叠的 条评论
为什么被折叠?



