Что такое IplImage
в OpenCV
? Можете ли вы просто объяснить, что подразумевается под этим как тип? Когда мы должны использовать его?
Спасибо.
Что такое IplImage
в OpenCV
? Можете ли вы просто объяснить, что подразумевается под этим как тип? Когда мы должны использовать его?
Спасибо.
Основываясь на теге 'С++', который у вас есть в вашем вопросе: Вы не должны использовать его, вы должны использовать cv:: Mat.. Каждый IplImage является внутренним cv:: Mat.
IplImage используется только в API C. Это своего рода CvMat и содержит данные изображения. Его имя происходит от корней OpenCV (Intel IPL).
Это не актуально, если вы используете С++ API OpenCV.
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 в целом содержит метаинформацию об изображении, например количество строк и столбцов.
Структура IplImage была унаследована от библиотеки обработки изображений Intel, в которой формат является родным. OpenCV поддерживает только подмножество возможных форматов IplImage, как указано в списке параметров выше.
Если вы используете С++, вы не используете IplImage, потому что это используется только в программе на C (IplImage в C API). Кроме того, если вы являетесь usin C, вам нужно написать Cv перед именами переменных: "CvMat *" "CvPoint" "IplImage " и т.д. Лучше использовать код на С++, вы не используете Cv: "Mat *" и т.д., Но вы не можете использовать тип IplImage, вместо IplImage вы используете тип Mat, например, в функции findchessboardcorner.