Получить ненулевые индексы из Mat OpenCV

У меня есть двоичная матрица, и я хотел бы получить индексы ненулевых элементов, желательно в виде вектора cv::Points. Есть функция, которая считает ненулевые элементы, но это не то, что мне нужно.

В Matlab эквивалентным вызовом будет просто find().

Я мог бы выполнить поиск по всей матрице и сохранить индексы, но это не стильно!


person phil0stine    schedule 08.06.2011    source источник
comment
opencv редко бывает классным.   -  person Chris Eberle    schedule 08.06.2011


Ответы (1)


Если вы не возражаете против использования модуля numpy, см. раздел NumPy для пользователей Matlab. Существует функция nonzero, эквивалентная Matlab find.

>>> m = cv.CreateMat(2,2,cv.CV_16SC1)
>>> a = numpy.asarray(m)
>>> a.nonzero()
(array([1, 1]), array([0, 1]))
person Andrey Sboev    schedule 08.06.2011
comment
Это Питон. Может быть, я должен удалить ответ. Хорошо, используйте python или понизьте мой ответ - person Andrey Sboev; 08.06.2011
comment
Спасибо, я знаком с numpy (довольно классно), но я уже вложился в C++. Я бы проголосовал за ваш ответ, но я недостаточно авторитетен! - person phil0stine; 08.06.2011
comment
это, вероятно, должен быть принятый ответ, учитывая, что в настоящее время это единственный классный способ сделать это. - person twerdster; 19.03.2012