精华内容
下载资源
问答
  • reshape函数

    2018-08-15 11:09:47
    在opencv中,reshape函数比较有意思,它既可以改变矩阵的通道数,又可以对矩阵元素进行序列化,非常有用的一个函数。 函数原型: C++: Mat Mat::reshape(int cn, int rows=0) const 参数比较少,但设置的时候却要...

    在opencv中,reshape函数比较有意思,它既可以改变矩阵的通道数,又可以对矩阵元素进行序列化,非常有用的一个函数。

    函数原型:

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

    参数比较少,但设置的时候却要千万小心。

    cn: 表示通道数(channels), 如果设为0,则表示保持通道数不变,否则则变为设置的通道数。

    rows: 表示矩阵行数。 如果设为0,则表示保持原有的行数不变,否则则变为设置的行数。

    首先设置一个初始矩阵:一个20行30列1通道的一个矩阵

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

    输出:

     

    第一次变化:通道数不变,将矩阵序列化1行N列的行向量。

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

     

    第二次变化:通道数不变,将矩阵序列化N行1列的列向量。

    复制代码
    int main()
    {
        Mat data = Mat(20, 30, CV_32F);  //设置一个20行30列1通道的一个矩阵
        cout << "行数: " << data.rows << endl;
        cout << "列数: " << data.cols << endl;
        cout << "通道: " << data.channels() << endl;
        cout << endl;
        Mat dst = data.reshape(0, data.rows*data.cols);
        cout << "行数: " << dst.rows << endl;
        cout << "列数: " << dst.cols << endl;
        cout << "通道: " << dst.channels() << endl;
        system("pause");
        return 1;
    }
    复制代码

     可见,序列成列向量比行向量要麻烦一些,还得去计算出需要多少行。但我们可以先序列成行向量,再转置

        Mat dst = data.reshape(0, 1);      //序列成行向量
        Mat dst = data.reshape(0, 1).t();  //序列成列向量

     

    第三次变化:通道数由1变为2,行数不变。

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

    从结果可以看出,列数被分出一半,放在第二个通道里去了。

    同理,如果通道数由1变为3,行数不变。则每通道的列数变为原来的三分之一。

    需要注意的是,如果行保持不变,改变的通道数一定要能被列数整除,否则会出错。

     

    第四次变化:通道数由1变为2,行数变为原来的五分之一。

    复制代码
    int main()
    {
        Mat data = Mat(20, 30, CV_32F);  //设置一个20行30列1通道的一个矩阵
        cout << "行数: " << data.rows << endl;
        cout << "列数: " << data.cols << endl;
        cout << "通道: " << data.channels() << endl;
        cout << endl;
        Mat dst = data.reshape(2, data.rows/5);
        cout << "行数: " << dst.rows << endl;
        cout << "列数: " << dst.cols << endl;
        cout << "通道: " << dst.channels() << endl;
        system("pause");
        return 1;
    }
    复制代码

    可见,不管怎么变,都遵循这样一个等式:

    变化之前的  rows*cols*channels = 变化之后的 rows*cols*channels

    我们只能改变通道数和行数,列数不能改变,它是自动变化的。

    但是要注意的是,在变化的时候,要考虑到是否整除的情况。如果改变的数值出现不能整除,就会报错。

     

    最后,我们再验证一下:opencv在序列化的时候是行序列化还是列序列化呢?

    我们知道,在matlab里面,是列序列化, 即取值为从上到下,从左到右,opencv又是怎么样的呢

    复制代码
    int main()
    {
        Mat data = (Mat_<int>(2, 3) << 1, 2, 3, 10, 20, 30);  //2行3列的矩阵
        cout << data << endl;
        Mat dst1 = data.reshape(0, 6);   //通道不变,序列成列向量
        cout <<endl<< dst1 << endl;
        Mat dst2 = data.reshape(0, 1);   //通道不变,序列成行向量
        cout << endl << dst2 << endl;
        system("pause");
        return 1;
    }
    复制代码

    从结果看出,不管是变化成行向量还是列向量,opencv都是行序列化,即从左到右,从上到下,与matlab是不一样的。

    简单的一个函数,功能却很强大!你会用了吗

    展开全文
  • 最近在写一个代码,主要是用tensorflow导入一个mat格式的数据(shape为2016*64*38,图片表示为2016维的向量),结果发现用tensorflow的reshape函数将图片向量转化为48*42的图片矩阵时,转化结果不对。同样的操作在...

    最近在写一个代码,主要是用tensorflow导入一个mat格式的数据(shape为2016*64*38,图片表示为2016维的向量),结果发现用tensorflow的reshape函数将图片向量转化为48*42的图片矩阵时,转化结果不对。同样的操作在matlab转化结果却是正常的。

    原因为matlab中的reshape函数按照列优先顺序来处理,而tensorflow按照行优先顺序来处理。

    例如有一个9个元素的数组[1, 2, 3, 4, 5, 6, 7, 8, 9]
    matlab的reshape结果为
    [[1,4,7]
     [2,5,8]
     [3,6,9]]
    tensorflow的reshape结果为
    [[1,2.3]
     [4,5,6]
     [7,8,9]]

     

    展开全文
  • Python Numpy中reshape函数参数-1的含义,新数组的shape属性应该要与原来数组的一致,即新数组元素数量与原数组元素数量要相等。一个参数为-1时,那么reshape函数会根据另一个参数的维度计算出数组的另外一个shape...

    Python Numpy中reshape函数参数-1的含义,新数组的shape属性应该要与原来数组的一致,即新数组元素数量与原数组元素数量要相等。一个参数为-1时,那么reshape函数会根据另一个参数的维度计算出数组的另外一个shape属性值。

    下面来举几个例子来理解一下:

    >>> z = np.array([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]])

    >>> print(z)

    [[ 1 2 3 4]

    [ 5 6 7 8]

    [ 9 10 11 12]

    [13 14 15 16]]

    >>> print(z.shape)

    (4, 4)

    >>> print(z.reshape(-1))

    [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]

    >>> print(z.reshape(-1,1)) #我们不知道z的shape属性是多少,

    #但是想让z变成只有一列,行数不知道多少,

    #通过`z.reshape(-1,1)`,Numpy自动计算出有16行,

    #新的数组shape属性为(16, 1),与原来的(4, 4)配套。

    [[ 1]

    [ 2]

    [ 3]

    [ 4]

    [ 5]

    [ 6]

    [ 7]

    [ 8]

    [ 9]

    [10]

    [11]

    [12]

    [13]

    [14]

    [15]

    [16]]

    >>> print(z.reshape(2,-1))

    [[ 1 2 3 4 5 6 7 8]

    [ 9 10 11 12 13 14 15 16]]

    展开全文
  • python numpy中reshape函数参数-1的含义,新数组的shape属性应该要与原来数组的一致,即新数组元素数量与原数组元素数量要相等。一个参数为-1时,那么reshape函数会根据另一个参数的维度计算出数组的另外一个shape...

    python numpy中reshape函数参数-1的含义,新数组的shape属性应该要与原来数组的一致,即新数组元素数量与原数组元素数量要相等。一个参数为-1时,那么reshape函数会根据另一个参数的维度计算出数组的另外一个shape属性值。

    下面来举几个例子来理解一下:

    >>> z = np.array([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]])

    >>> print(z)

    [[ 1 2 3 4]

    [ 5 6 7 8]

    [ 9 10 11 12]

    [13 14 15 16]]

    >>> print(z.shape)

    (4, 4)

    >>> print(z.reshape(-1))

    [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]

    >>> print(z.reshape(-1,1)) #我们不知道z的shape属性是多少,

    #但是想让z变成只有一列,行数不知道多少,

    #通过`z.reshape(-1,1)`,numpy自动计算出有16行,

    #新的数组shape属性为(16, 1),与原来的(4, 4)配套。

    [[ 1]

    [ 2]

    [ 3]

    [ 4]

    [ 5]

    [ 6]

    [ 7]

    [ 8]

    [ 9]

    [10]

    [11]

    [12]

    [13]

    [14]

    [15]

    [16]]

    >>> print(z.reshape(2,-1))

    [[ 1 2 3 4 5 6 7 8]

    [ 9 10 11 12 13 14 15 16]]

    希望与广大网友互动??

    点此进行留言吧!

    展开全文
  • matlab reshape函数

    千次阅读 2014-07-16 14:22:10
    matlab reshape函数
  • opencv3: reshape 函数

    2019-11-22 17:50:01
    opencv3: reshape 函数...在opencv中,reshape函数比较有意思,它既可以改变矩阵的通道数,又可以对矩阵元素进行序列化,非常有用的一个函数。 函数原型: C++: Mat Mat::reshape(int cn, int rows=0) const ...
  • numpy reshape函数使用

    千次阅读 2017-07-27 11:27:36
    numpy reshape 函数的基本使用
  • Matlab之reshape函数

    2020-02-15 09:30:37
    注意:reshape函数只改变原矩阵的行数和列数,不改变原矩阵元素个数及存储顺序。 2、代码示例 clc; clear all; A= [1,2,3;4,5,6] %2行3列的矩阵 B = reshape(A, 3, 2) %将矩阵变换为3行2列,并存到B中 ...
  • Opencv中reshape函数

    2019-12-09 21:32:06
    在opencv中,reshape函数比较有意思,它既可以改变矩阵的通道数,又可以对矩阵元素进行序列化,非常有用的一个函数。 函数原型: C++: Mat Mat::reshape(int cn, int rows=0) const 参数比较少,但设置的时候却要...
  • reshape函数使用

    千次阅读 2016-06-30 16:56:56
    ''' reshape函数使用 ''' x = np.arange(16).reshape(4,4) print x x = x.reshape(-1,16) print x [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15]] [[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9
  • opencv reshape函数详解

    2019-09-03 14:40:25
    在opencv中,reshape函数比较有意思,它既可以改变矩阵的通道数,又可以对矩阵元素进行序列化,非常有用的一个函数。 函数原型: C++: Mat Mat::reshape(int cn, int rows=0) const 参数比较少,但设置的时候却要...
  • Numpy.reshape函数解释

    万次阅读 多人点赞 2017-04-09 22:01:36
     虽然官网上关于reshape函数的标准格式是numpy.reshape(a, newshape, order='C'),但其实这个函数有两种用法。先看代码: import numpy as np a=np.array([1,2,3,4,5,6,7,8,9,10,11,12]) b=np.reshape(a,(2,-1)) c...
  • Opencv的reshape函数

    2019-11-06 09:01:04
    reshape函数既可以改变矩阵的通道数,又可以对矩阵元素进行序列化,而且不需要复制数据。 C++: Mat Mat::reshape( int cn, int rows=0 ) const 参数虽然比较少,但是设置时需要小心 参数说明: cn - 表示通道数...
  • python-reshape函数

    千次阅读 2018-08-03 16:34:04
    使用numpy的reshape函数可以改变数组形状 X_reshape=numpy.reshape(X, newshape, order=’C’) 1. 将m*n维数组按行拼接为行向量 import numpy as np X=np.array([[1, 2, 3],[4, 5, 6]]) X_reshape=np.reshape(X...
  • reshape函数的用法

    千次阅读 2018-08-23 10:54:42
    二、函数特点:reshape函数是针对对目标函数取数据用于重新布局时,是按照列的方式来获取数据的 三、几种常见使用方式: 方式一:arr.reshape((m,n))意思是把arr矩阵变成一个新的m行n列的矩阵 方式二:arr.reshape(-...
  • numpy之reshape函数

    千次阅读 2019-04-20 16:34:01
    numpy中reshape函数 以下为代码展示: >>> import numpy as np >>> >>> a = np.ones([2,3,4,5]) >>> a.shape (2, 3, 4, 5) >>> >>> b=np.reshape(a,[-1]) ...
  • numpy.reshapenumpy.reshape(a, newshape, order='C') [source]在不更改数据的情况下为数组赋予新的shape。参数 :a :array_like要重塑的数组。newshape :int 或int类型的tuple新形状应与原始形状兼容。 如果是...
  • MATLAB中reshape函数的用法

    千次阅读 2017-12-31 15:56:03
    MATLAB中reshape函数的用法
  • MATLAB的reshape函数

    万次阅读 2017-04-29 23:03:34
    A是4*6的,C是2*3*4的,都有24个元素,变换前后的矩阵元素个数一样总结reshape函数总是将原矩阵A,重组为新矩阵B,这里A、B元素个数需相同。重组的规则如下: 总是先处理低维的,再处理高维的,比如要把4*6的A变为6...
  • OpenCV reshape函数需要注意的细节

    千次阅读 2018-05-09 17:04:02
    OpenCV reshape函数需要注意的细节 本人在使用OpenCV的reshape()函数时,曾经碰到一个大坑,出现一个非常奇葩的问题,先把原始的代码贴上:#include &lt;opencv2/opencv.hpp&gt; #include "...
  • C++: Mat Mat::reshape(int cn,... ... rows: 表示矩阵行数。 如果设为0,则表示保持原有的行数不变,否则则变为设置的行数。 注意设置行数后,列数会自动调整,rowscolschannels()保持不变 opencv3学习:reshape函数 ...
  • opencv中的reshape函数

    千次阅读 2018-03-26 15:20:27
    在opencv中,reshape函数比较有意思,它既可以改变矩阵的通道数,又可以对矩阵元素进行序列化,非常有用的一个函数。函数原型:C++: Mat Mat::reshape(int cn, int rows=0) const参数比较少,但设置的时候却要千万...
  • A.reshape(-1,8):表示将数组转换成8列的数组,具体多少行我们不知道,所以参数设为-1。用我们的数学可以计算出是3行8列2当原始数组A[4,6]为二维数组,代表4行6列。A.reshape(3,-1):表示将数组转换成3行的数组,...
  • matlab的reshape函数

    千次阅读 2016-03-04 18:04:41
    reshape函数初用的时候,功能比较模糊,举例如下: (1)一维向量转二维向量 AA = [1 2 3 4 5 6], BB = reshape(AA, [2 3]) BB : 1 3 5  2 4 6 (2) 二维矩阵转二维矩阵 AA =  1 2 3  4 5 6
  • tf.reshape函数用法&理解

    千次阅读 2020-05-20 16:25:53
    函数原型 函数接口: tf.reshape( tensor, shape, name=None ) ...Tensor张量,用于定义输出张量的shape,组成元素...tf.reshape函数用于对输入tensor进行维度调整,但是这种调整方式并不会修改内部元素的数量以及
  • python numpy中reshape函数参数-1的含义,新数组的shape属性应该要与原来数组的一致,即新数组元素数量与原数组元素数量要相等。一个参数为-1时,那么reshape函数会根据另一个参数的维度计算出数组的另外一个shape...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,301
精华内容 920
关键字:

reshape函数