2014-10-05 172 views
0

我想将图像分成更小的图像。我有一个8192x8192像素图像,我想分成1024x256像素的较小图像。所以我想获得一个看起来像256x256x1024的矩阵。OpenCV C++ image.reshape无法正常工作?

我尝试做这样的:

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

垫imSeparate(太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的主页(http://docs.opencv.org/modules/core/doc/basic_structures.html#mat-reshapecols行的乘积()在转换后必须是相同的,这是显而易见的。

所以起初图像是8192x8192 = 67108864像素,然后经过我的要求重塑它应该是像256x256x1024 = 67108864像素提到的。但没有它的256x256x512 = 33554432像素....哪里有一半的图像去???

Myabe我只是想要看看是什么错,但是有没有人有任何关于这个或任何其他好的建议将图像分成更小的peices的线索?

此外,我不知道如何重塑这样做,但我假设第一个通道将是 x = 1到256,y = 1到256个像素,第二个通道将是x = 257到512, y = 1到256像素或其他方式取决于是否将其逐行或逐行。

回答

2

信道的最大数目是有限的:

信道的最大可能数目是由CV_CN_MAX常数,它是当前被设定为512

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

定义

第5或11页

不确定您是否可以简单地使用另一个值编译openCV CV_CN_MAX