Как я могу определить, использует ли cv :: Mat внутренние или внешние данные?

Я интегрирую OpenCV с устаревшей кодовой базой, у которой есть собственный класс изображений с подсчетом ссылок. Я добавляю конструктор для создания этих изображений из cv :: Mat. В качестве оптимизации я хотел бы использовать механизм реф-подсчета cv :: Mat и сделать неглубокую копию, когда он владеет данными. Однако, когда он использует внешние данные, мне нужно принудительно выполнить глубокую копию.

Проблема в том, что, читая документы, я не вижу способа определить, владеет ли cv :: Mat своими данными или нет. Можно ли это сделать (без модификации OpenCV)?

Кстати, если это имеет значение, я использую OpenCV 3.1.


person Droid Coder    schedule 31.01.2017    source источник
comment
Вы видели код конструктора или деструктора cv :: Mat, как они решают, хранит ли Mat внутренние или внешние данные?   -  person Micka    schedule 31.01.2017
comment
Я смотрел на mat.hpp, matrix.cpp и umatrix.cpp достаточно долго, чтобы оценить их сложность.   -  person Droid Coder    schedule 31.01.2017
comment
Я пропустил opencv2 / core / mat.inl.hpp. Я думал, что некоторые встроенные функции, вероятно, где-то прячутся.   -  person Droid Coder    schedule 01.02.2017
comment
@Micka: именно из этого вопроса и вашего комментария я думаю, что, вероятно, знаю, что такое определение внешних данных: данных, в которых OpenCV не несет ответственности за их реф-подсчет. Я прав?   -  person Rainning    schedule 03.10.2020
comment
@Micka: Кстати, я пытаюсь прочитать все руководства, предоставляемые OpenCV.org, это самый эффективный способ изучить OpenCV? Я новичок в OpenCV (я использую версию 4.4.0), и я просто хочу нарисовать гистограмму и понять, почему это так, но я не могу. Я не могу понять calcHist, поэтому я решил прочитать все учебные модули с самого начала ...   -  person Rainning    schedule 03.10.2020


Ответы (1)


Используйте член UMatData * u из cv :: Mat. Он должен быть 0, если cv :: Mat использует внешние данные, в противном случае вы можете получить счетчик ссылок следующим образом

img.u->refcount
person O'Neil    schedule 31.01.2017