Emgu CV中的Matrix.Reshape()函数

时间:2013-03-21 18:23:13

标签: matrix emgucv

任何人都可以告诉我有关Matrix Reshape(int newChannels,int newRows)的功能。 newChannels的意思是什么意思?我的代码在下面

Matrix<Double> A = new Matrix<Double>(4, 4);
Matrix<Double> reshapeMatrix;
reshapeMatrix = A.Reshape(1, 16);

此代码正常运行。但是

 reshapeMatrix = A.Reshape(2, 8);

此代码运行成功,但reshapeMatrix大小不正确,我无法使用reshapeMatrix数据。

任何人都能解释为什么会这样吗?我如何对任何大小的矩阵使用reshape()函数?

1 个答案:

答案 0 :(得分:1)

正如您所注意到的,Matrix.Reshape将newChannels作为第一个参数。矩阵可以有多个通道,例如颜色通道(1表示灰度,3表示RGB)。 Reshape所做的是它重塑了矩阵的通道,列和行。

使用reshapeMatrix = A.Reshape(2, 8);想要实现的目标可能是重新整形矩阵,使其具有2列和8行,但仍然是一个颜色通道。或者我错了吗?

如果这是你想要达到的目的,那么正确的方法是:

reshapeMatrix = A.Reshape(1, 8);

由于有16个元素和8行,列数将自动为2.通道数仍保持为1。

reshapeMatrix = A.Reshape(1, 16);之所以有效,是因为您指定应该保留一个颜色通道。有16行,剩下的唯一选择就是有一列。