Как я могу эффективно проверить, идентичны ли 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.