2017-01-15 3 views
0

Я пытаюсь построить матрицу расстояний между кадрами в C++ с OpenCv 2.4.10. Я думаю, мне нужен коврик из матов, поэтому я могу поместить в первую строку и col все кадры и сделать оператор XOR за кадром. Но для этого мне нужна структура, подобная матрице, которая содержит в каждой позиции другую матрицу. Есть ли что-то вроде Мата Маца? Или вы можете предложить другое решение? Я думал об использовании Vector, но мне нужно больше, чем массив Mat. Спасибо, что я новичок в этом!Opencv C++ создаем коврик матов

ответ

0

Если я правильно понял, то, что вы ищете, является двумерным объектом Mat, каждый из которых является другим двумерным объектом Mat. Это эквивалентно созданию 4-мерного объекта Mat. OpenCV имеет такую ​​функциональность - это только включает в себя использование одного из менее популярных и менее удобных Мастут конструкторы:

const int num_of_dim = 4; 
const int dimensions[num_of_dim] = { a, b, c, d }; // a, b, c, d - desired dimensions defined elsewhere 
cv::Mat fourd_mat(num_of_dim, dimensions, CV_32F); 

Check Mat :: Mat (INT ndims, константные INT * размеры, Int типа) конструктора в OpenCV документах :

http://docs.opencv.org/2.4.10/modules/core/doc/basic_structures.html#Mat::Mat(int%20ndims,%20const%20int *% 20sizes,% 20int% 20type)

, а также поиск по фразе "многомерный" и "п-мерного" на этой странице, чтобы найти больше примеров и документации.

EDIT:

В соответствии с просьбой, я показываю, как загрузить изображение в такой структуре. Это не красиво, но я думаю, самый простой способ, чтобы скопировать пиксель изображения на пиксель:

img = imread("path/img.jpg", 1); 
for (int i = 0; i < 179; ++i) 
{ 
    for (int j = 0; i < img.rows; ++i) 
    { 
     for (int k = 0; j < img.cols; ++j) 
     { 
      const int coords1[4] = { i, 0, j, k }; 
      const int coords2[4] = { 0, i, j, k }; 
      fourd_mat.at<float>(coords1) = img.at<float>(j, k); //line 1 
      fourd_mat.at<float>(coords2) = img.at<float>(j, k); //line 2 
     } 
    } 
} 

Линия комментировал, как LINE1 эквивалентно вашей линии struttura [я] [0] = IMG; и строка2 эквивалентна struttura [0] [i] = img; после того, как две самые внутренние для петель закончат свою работу.

Код выше предполагает, что ваш тип изображения CV_32F - если это 8UC, вы должны заменить поплавок с Uchar в в() функции.

+0

спасибо Я изучу его и дам вам знать! – stardust

+0

Эй, это то, что вы искали? – KjMag

Смежные вопросы