OpenCV C ++ image.reshape无法正常工作?

时间:2014-10-05 17:48:12

标签: c++ image opencv image-processing

我想将图像划分为较小图像的图像。我有一个8192x8192像素的图像,我想分成1024个256x256像素的较小图像。所以我会得到一个看起来像256x256x1024的矩阵。

我尝试这样做:

im = 8192x8192x1像素,灰度图像(例如红色光谱)

Mat imSeparate(Mat im) {

Mat tmp = im;
Mat tmp1;
int tmp_x = tmp.rows / 256;
int tmp_y = tmp.cols / 256;
int tmp_tot = tmp_x*tmp_y;

tmp1 = tmp.reshape(tmp_tot, 256);

return tmp1;

}

但是由于一些我无法理解的奇怪原因,它将其重塑为512x256x256矩阵。

根据opencv:s主页(http://docs.opencv.org/modules/core/doc/basic_structures.html#mat-reshape),行 cols channels()的乘积在转换后必须相同,而duuh很明显。

所以首先图像是8192x8192 = 67108864像素,然后在我请求的重塑之后它应该像256x256x1024 = 67108864像素一样提到。但不是没有它的256x256x512 = 33554432像素....图像的一半去了哪里???

Myabe我只是为了看看故障是什么,但有没有人对这个或任何其他好的建议有任何线索将图像分成更小的阴影?

此外,我并不确切知道重塑是如何做到的,但我认为第一个频道将是 x = 1到256,y = 1到256个像素,第二个通道将是x = 257到512,y = 1到256个像素,或者反过来取决于是逐行还是逐行。

1 个答案:

答案 0 :(得分:2)

最大频道数量有限:

  

最大可能通道数由CV_CN_MAX常量定义,当前设置为512

取自

http://docs.opencv.org/opencv2refman.pdf

第5页或第11页

不确定是否可以使用CV_CN_MAX

的其他值编译openCV