В Формате OpenCV - IplImage

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

спасибо.

4 ответов


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

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

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


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

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

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

cv::Mat mat(myIplImage);

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

Deep-copy (не только заголовок "преобразован"/скопирован, но и базовые данные) возможен с

cv::Mat mat(myIplImage, true)

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


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

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

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


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


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