Подтвердить что ты не робот

OpenCV - IplImage

Что такое IplImage в OpenCV? Можете ли вы просто объяснить, что подразумевается под этим как тип? Когда мы должны использовать его?

Спасибо.

4b9b3361

Ответ 1

Основываясь на теге 'С++', который у вас есть в вашем вопросе: Вы не должны использовать его, вы должны использовать cv:: Mat.. Каждый IplImage является внутренним cv:: Mat.

IplImage используется только в API C. Это своего рода CvMat и содержит данные изображения. Его имя происходит от корней OpenCV (Intel IPL).

Это не актуально, если вы используете С++ API OpenCV.

Ответ 2

IplImage и cv:: Mat - разные типы заголовков для данных матрицы/изображения. Они в основном совместимы друг с другом, но IplImage используется в API OpenCV C, а cv:: Mat используется в новом С++ API.

Когда вы решите использовать API OpenCV C, вы в основном будете использовать IplImages. В противном случае вы будете в основном использовать cv:: Mats.

Конечно, вы можете конвертировать IplImages и cv:: Mats друг в друга, например.

cv::Mat mat(myIplImage);

В этом случае они используют одни и те же базовые данные, т.е. изменения, сделанные через любой заголовок, будут видны независимо от того, какой заголовок вы используете для доступа к данным.

Глубокая копия (не только заголовок "преобразован" /скопирован, но также и базовые данные) возможен с помощью

cv::Mat mat(myIplImage, true)

Обратите внимание, что несколько IplImages также могут указывать на те же базовые данные, что и несколько cv:: Mats.


При работе с OpenCV и аналогичными библиотеками важно заметить, что cv:: Mats и IplImages являются только "заголовками" для фактических данных. Можно сказать, что cv:: Mats и IplImages - это в основном указатели плюс важная метаинформация, такая как количество строк, столбцов, каналов и тип данных, используемые для отдельных ячеек/пикселей матрицы/изображения. реальные указатели, они могут ссылаться/указывать на одни и те же реальные данные.

Например, посмотрите на определение IplImage: http://opencv.willowgarage.com/documentation/basic_structures.html#iplimage

Самый важный элемент - char *imageData;. Этот указатель ссылается на фактические данные изображения. Однако IplImage в целом содержит метаинформацию об изображении, например количество строк и столбцов.

Ответ 3

Структура IplImage была унаследована от библиотеки обработки изображений Intel, в которой формат является родным. OpenCV поддерживает только подмножество возможных форматов IplImage, как указано в списке параметров выше.

Ответ 4

Если вы используете С++, вы не используете IplImage, потому что это используется только в программе на C (IplImage в C API). Кроме того, если вы являетесь usin C, вам нужно написать Cv перед именами переменных: "CvMat *" "CvPoint" "IplImage " и т.д. Лучше использовать код на С++, вы не используете Cv: "Mat *" и т.д., Но вы не можете использовать тип IplImage, вместо IplImage вы используете тип Mat, например, в функции findchessboardcorner.