мелкое сравнение cv :: Mat объектов (имеют одинаковый заголовок) - PullRequest
0 голосов
/ 07 сентября 2018

Как я могу эффективно проверить, идентичны ли 2 объекта UMat (и Mat) и указывают на одни и те же данные, то есть имеют ли они одинаковый заголовок? Мне нужна функция isShallowEqual (), работающая следующим образом:

int someData [4] {1,2,3,4};
Mat m1 (2, 2, CV_32F, someData);
UMat u1;
UMat u2;
UMat u3;
m1.copyTo(u1);
//isShallowEqual(u1,u1) should return true
u2=u1;
//isShallowEqual(u1,u2) should return true
u1.copyTo(u3);
//isShallowEqual(u1,u3) should return false

и аналогично для ковриков:

int someData [4] {1,2,3,4};
Mat m1 (2, 2, CV_32F, someData);
UMat m2, m3;
//isShallowEqual(m1,m1) should return true
m2=m1;
//isShallowEqual(m1,m2) should return true
m1.copyTo(m3);
//isShallowEqual(m1,m3) should return false

Я могу выполнить эту проверку размера, типа, шага и поля .data с помощью Mats, но не знаю, как получить эквивалент поля .data для UMats

Я уже пробовал использовать memcmp, но memcmp(&m1,&m2, sizeof(m1)) не вернет 0 (и аналогично для UMats) В случае с Mat я сравнил открытые атрибуты:

  • Распределитель
  • перевалы
  • данные
  • dataend
  • DATALIMIT
  • datastart
  • тускнеет
  • флаги
  • Строка
  • размер
  • шаг
  • и

И все результаты равны для m1 и m2.

...