Почему следующий сегмент кода работыПочему этот диапазон взрывать
int sizearray[3] = {3,4,2};
Mat OneM = Mat::ones(3,4,CV_8UC1);
Mat TwoM = Mat::ones(3,4,CV_8UC1)+1;
Mat OneTwo3D = Mat::zeros(3,sizearray,CV_8UC1);
Mat OneTwo3DPlaneM;
Range OneTwo3DRanges[] = {Range(1,3),Range(1,4),Range(1,2)};
OneTwo3DPlaneM = OneTwo3D(OneTwo3DRanges);
, но если я изменить диапазоны для
Range OneTwo3DRanges[] = {Range(1,4),Range(1,4),Range(1,2)};
она взрывается.
В рабочей один, по-видимому, OneTwo3DPlaneM
матрица 2x3x1, как ожидалось, учитывая, что «конец» в Range
эксклюзивна (подтверждено, глядя на рабочий код/результат диапазона OneTwo3DPlaneM.size.p
который [2,3,1]
). Однако, только увеличивая первый диапазон от Range(1,3)
до Range(1,4)
вызывает ошибку на
OneTwo3DPlaneM = OneTwo3D(OneTwo3DRanges);
Примечания, что я пытаюсь сделать, в конце концов, это присвоить изображение в кусочек 3d arrray (через OneM.copyTo(OneTwo3DPlaneM)
я думаю). Вышеприведенный код является просто тестом для этого. Итак, я просто хочу создать матрицу, которая ссылается на плоскость OneTwo3D
, так что для этого теста я могу назначить матрицы OneM
первой плоскости и, в конечном счете, TwoM
на вторую плоскость (после того, как я изменил третий диапазон, чтобы указать на OneTwo3D
)
Учитывая, что у меня нет большого опыта работы с opencv, я предполагаю, что я делаю что-то замедленное. Извинитесь впереди.
Да, «конец» диапазона является исключительным, просто не ожидайте, что он «зацепит» любое значение, которое вы дадите ему чему-то действительному. как вы уже выяснили ранее, 3 - максимальное допустимое значение в вашем случае. – berak
, если OneTwo3D создается как матрица 3x4x2 и диапазон (1,4) ==> от 1 до 3, то он, безусловно, должен быть действительным, а если нет, разве это не ошибка? В конце концов, если я не могу сделать так, какой другой способ? Это не то, что оператор 'Mat Mat :: operator() (const Range * range) const'is для – user3288226
в качестве побочного элемента, в большинстве ситуаций лучше использовать Mat (3,4, CV_32FC (2)) вместо , гораздо проще в использовании и лучше поддерживать большинство операций математики. – berak