2012-01-17 1 views
4

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

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

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

ответ

0

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

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

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

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

+0

Я в замешательстве - я думал, что количество каналов было отделено от спецификации float/unsigned. например трехканальное 8-битное изображение должно быть CV_8UC3. Однако мой вопрос заключается не в том, какую функцию вызывать для сопоставления шаблонов, но в более широком смысле о том, есть ли более элегантный способ обработки преобразований глубины бит. Например, существует ли метод, который автоматически перескакивает с одной битовой глубины на другую или нормализуется до полного диапазона? Есть ли причина, по которой 16U и другие битовые глубины не поддерживаются многими функциями? – daj

0

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

Смежные вопросы