OpenCV - путаница в требованиях к битовой глубине различных функций - PullRequest
4 голосов
/ 17 января 2012

В моем коде opencv на C ++ я выполняю много вызовов convertTo ().Это несколько сбивает с толку, и я не уверен, когда мне нужно преобразовать битовую глубину изображения, пока я не получу сообщение об ошибке.

Например, у меня есть Mat, представляющий изображение, которое составляет 16U.Затем я пытаюсь вызвать matchTemplate () и получаю ошибку подтверждения, что он ожидает 8U или 32F.Почему сопоставление с шаблоном не должно работать в 16U?Аналогичные проблемы при отображении изображения (хотя ограничения глубины цвета имеют больше смысла в случае отображения изображений).Я ловлю себя на множителях с convertTo () и коэффициентами масштабирования и такими, пытающимися заставить изображения правильно отображаться с помощью imshow (), и хотел бы сделать это более элегантно (может быть, я испорчен функцией imagesc matlab).

Мне не хватает чего-то фундаментального в том, что openCV ожидает от использования битовой глубины?Как более четко справиться с требованиями функций библиотеки opencv к битовой глубине?

Ответы [ 2 ]

0 голосов
/ 27 февраля 2012

Наиболее распространенный тип изображения - 8U (для цветного и серого).Это предпочтительный формат OpenCV.
Другие форматы поддерживаются в зависимости от конкретной функции.

0 голосов
/ 17 января 2012

Предполагается, что вы используете C интерфейс :

cvMatchTemplate(const CvArr* image, const CvArr* templ, CvArr* result,int method)

image - изображение, в котором выполняется поиск; должен быть 8-битным или 32-битным с плавающей точкой

Большинство функций в OpenCv будут использовать 8U (для полутоновых изображений) или 32F (для цветных 3-канальных изображений).

...