【问题标题】:OpenCV reshape function does not work properlyOpenCV reshape 功能无法正常工作
【发布时间】:2016-03-24 08:37:34
【问题描述】:

我正在使用 OpenCV reshape 函数将 25 行 1 列的 Mat(所以我们有 25 个数据值)重塑为 5 行 5 列的 Mat。

data = mu.reshape(5, 5);

当我在调试器中查看我的数据变量时,它有 5 行但 1 列。如果我在 row(0) 和 col(0) 打印数据,它会输出所有五个值。所以基本上 col(0) 的每一行都包含 5 个值。

我想要的结果是获得 5 行和 5 列,其中每个 (row,col) 将是一个值。

提前感谢您的帮助。

【问题讨论】:

  • reshape 的第一个参数是通道数。您正在制作一个 5 行 1 列的 5 通道矩阵。您需要一个 5 行 5 列的 1 通道矩阵。因此mu.reshape(1,5); 甚至mu.reshape(0,5);。阅读docs

标签: c++ opencv


【解决方案1】:

您似乎误解了reshape() 函数参数的含义。

根据documentation的签名是

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

参数含义如下:

  • cn – 新的频道数量。如果参数为0,则通道数保持不变。
  • rows – 新的行数。如果参数为0,则行数保持不变。

请注意,列数是隐含的——它是根据现有矩阵属性和两个参数计算得出的。

据此,代码

data = mu.reshape(5, 5);

创建一个 5 行 1 列的 5 通道矩阵。

为了将矩阵重塑为单通道 5x5 矩阵,您必须执行以下操作:

data = mu.reshape(1, 5);

或者,由于输入矩阵已经是单通道的,你也可以使用

data = mu.reshape(0, 5);

【讨论】:

  • 非常感谢。这是有道理的!
猜你喜欢
  • 2014-08-24
  • 2015-07-05
  • 2017-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多