2014-10-05 2 views
0

Я хочу разделить изображение на более мелкие изображения. У меня есть 8192x8192 пикселей изображения, которые я хочу разделить на 1024 меньших изображений с 256x256 пикселей. Поэтому я бы получил матрицу, которая выглядит как 256x256x1024.OpenCV C++ image.reshape не работает должным образом?

Я пытаюсь сделать это следующим образом:

IM = 8192x8192x1 пикселей, черно-белое изображение (только красный спектр, например)

Mat imSeparate (Mat им) {

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-reshape) произведение рядов Cols каналов() должен быть таким же, после преобразования которого duuh очевидна.

Таким образом, сначала изображение 8192x8192 = 67108864 пикселя, затем после моего запрошенного изменения он должен быть указан как 256x256x1024 = 67108864 пикселей. Но нет нет его 256x256x512 = 33554432 пикселей .... где сделала половину изображения? ???

Myabe Im просто задерживается, чтобы узнать, в чем заключается ошибка, но есть ли у кого-нибудь какие-либо подсказки по поводу этого или любого другого хорошего предложения разделить изображение на более мелкие кусочки?

Также я точно не знаю, как это сделать, но я предполагаю, что первым каналом будет 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