OpenCV的reshape函数无法正常工作

5

我正在使用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通道矩阵。你想要一个1通道的5行5列矩阵。因此使用 mu.reshape(1,5); 或者 mu.reshape(0,5);。请查看 文档 - Dan Mašek
1个回答

8
你似乎误解了reshape()函数的参数含义。
根据文档,它的签名是:
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);

非常感谢。这很有道理! - Edster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接