OpenCV 重塑功能无法正常工作

Eds*_*ter 2 c++ opencv

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

data = mu.reshape(5, 5);
Run Code Online (Sandbox Code Playgroud)

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

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

预先感谢您的帮助。

Dan*_*šek 5

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

根据文档,签名是

Mat Mat::reshape(int cn, int rows=0) const
Run Code Online (Sandbox Code Playgroud)

参数的含义如下:

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

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

据此,代码

data = mu.reshape(5, 5);
Run Code Online (Sandbox Code Playgroud)

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

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

data = mu.reshape(1, 5);
Run Code Online (Sandbox Code Playgroud)

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

data = mu.reshape(0, 5);
Run Code Online (Sandbox Code Playgroud)