В Формате OpenCV - IplImage
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.