2014-10-05 64 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