Как определить и использовать OpenCV мат пользовательского типа

Мой вопрос похож на один из cv::Mat of std::vector ... как мне это сделать?

Мне нужна матрица, где каждый элемент является std:: vector. Эта матрица представляет собой результат расчетов, выполненных для серии изображений одинакового размера (например, видео). Многие из расчетов представляют собой типичные функции cv (преобразование в оттенки серого, рамочный фильтр и т. Д.), И затем значение пикселя добавляется к вектору. Я не знаю заранее, сколько изображений у меня будет, и в любом случае я не могу использовать концепцию канала, поскольку изображений может быть больше 512.

Одним из предложенных ответов было использование циновки указателей. Так что, если я попробую следующее, это будет работать?

Это будет на машинах Windows, и я понимаю, что размер указателя INT-PTR составляет 64 бита. Затем я мог бы использовать CV_64, но определяется только CV_64F. Поскольку я не буду делать какие-либо вычисления с этой матрицей, могу ли я использовать это для хранения указателей. Я думаю, что прежде чем прочитать первое изображение, я получу размер, создаю эту матрицу, использую "new std::vector", чтобы создать вектор для каждого пикселя и сохранить этот указатель в элементе. В цикле для моих расчетов я использую одно и то же смещение доступа для чтения исходных изображений и сохранения выходных данных в векторе. Когда я закончу с векторами, мне нужно удалить их, прежде чем я выпущу cv::mat.

Я ценю любой вклад от тех, кто знает больше об opencv, чем я - это действительно из первого приложения с opencv.

1 ответ

Решение

Пытаться

cv::Mat_<your_type>

http://docs.opencv.org/modules/core/doc/basic_structures.html

Особенно:

To use Mat_ for multi-channel images/matrices, pass Vec as a Mat_ parameter 

Есть хороший пример, и вы можете использовать свою собственную "смесь" Vec(при условии, что размер массива / вектора для каждого элемента фиксирован), или, если вам действительно нужно, вы можете использовать std::vector,

Другие вопросы по тегам