Объяснение IplImage* img

Я только начал изучать OpenCV с «Изучения компьютерного зрения OpenCV с библиотекой OpenCV».

В первом примере, демонстрирующем отображение изображения, есть строка

IplImage* img = cvLoadImage("name.type")

Хотя книга объясняет это, я до сих пор не знаю, что именно делает IplImage* img.

Загружает ли cvLoadImage изображение в img, на которое указывает IplImage? Кто-нибудь может объяснить это мне, пожалуйста? Спасибо


person decypher    schedule 25.06.2013    source источник
comment
Если вы только начинаете изучать OpenCV, я настоятельно рекомендую использовать C++ API. C API (включая IplImage) устарел (не говоря уже о том, что его сложнее использовать). Вместо этого вы можете начать с уроков OpenCV.   -  person Aurelius    schedule 26.06.2013


Ответы (1)


  • img — это имя переменной, а может быть и blahblahblah;

  • IplImage — это тип переменной, это просто struct, который содержит сами данные изображения, а также некоторую информацию (размер, глубину цвета и т. д.) об изображении;

    typedef struct _IplImage {
    int                  nSize;
    int                  ID;
    int                  nChannels;
    int                  alphaChannel;
    int                  depth;
    char                 colorModel[4];
    char                 channelSeq[4];
    int                  dataOrder;
    int                  origin;
    int                  align;
    int                  width;
    int                  height;
    struct _IplROI*      roi;
    struct _IplImage*    maskROI;
    void*                imageId;
    struct _IplTileInfo* tileInfo;
    int                  imageSize;
    char*                imageData;
    int                  widthStep;
    int                  BorderMode[4];
    int                  BorderConst[4];
    char*                imageDataOrigin;
    } IplImage;
    

Для получения дополнительной информации о IplImage: Другой вопрос об IplImage

  • cvLoadImage предоставляет указатель на IplImage, что означает, что он создает IplImage, когда загружает его и возвращает вам его размещение.

Не забудьте сделать cvReleaseImage(&img), когда закончите с этим, если вы не хотите иметь утечки памяти.

person Smash    schedule 25.06.2013
comment
Итак, IplImage — это структура данных, в которой хранится информация о переменной img? Если вы не возражаете, я хотел бы задать вам еще несколько вопросов, пока вы здесь... Зачем нужен указатель для IplImage? Что это означает, когда он говорит, что затем возвращается указатель на выделенную структуру данных изображения? Спасибо - person decypher; 26.06.2013
comment
Есть данные изображения И указатель на них, созданный с помощью вызова IplImage* img = cvLoadImage("name.type"). Причина, по которой вы объявляете это как таковое, заключается в том, что все методы cv... принимают и возвращают указатели на изображения. Книга, по которой вы учитесь, основана на старом openCV API, написанном на C. Теперь последняя стабильная версия openCV 2.4.5 использует C++ API, где нет необходимости в указателях. Наряду с книгой ознакомьтесь с документацией opencv 2.4.5 и легко учитесь с помощью отличных руководств. В C++ API объявление Mat image = imload(""); без указателя, и методы требуют данных, а не его указателя. - person baci; 26.06.2013