2013-06-25 42 views
16

Tôi vừa mới bắt đầu học OpenCV với "Learning OpenCV Computer Vision với Thư viện OpenCV".Giải thích về IplImage * img

Trong ví dụ đầu tiên mà chứng minh làm thế nào để hiển thị một hình ảnh, nó có một dòng

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

Mặc dù cuốn sách giải thích nó, tôi vẫn chưa hoàn toàn biết chính xác những gì IplImage* img làm.

CvLoadImage có tải hình ảnh vào img mà IplImage trỏ tới không? Bất cứ ai có thể giải thích điều này cho tôi xin vui lòng? Cảm ơn bạn

+4

Nếu bạn mới bắt đầu học OpenCV, tôi ** đề nghị sử dụng C++ API. C API (bao gồm cả 'IplImage') không được chấp nhận (không đề cập đến khó sử dụng hơn). Bạn có thể muốn bắt đầu tại [hướng dẫn] của OpenCV (http://docs.opencv.org/doc/tutorials/tutorials.html) để thay thế. – Aurelius

Trả lời

25
  • img là tên của biến, cũng có thể là blahblahblah;

  • IplImage là loại biến, chỉ là struct có chứa chính dữ liệu hình ảnh cùng với một số thông tin (kích thước, độ sâu màu, v.v.) trên hình ảnh;

    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; 
    

Để biết thêm về IplImage: Other question about IplImage

  • cvLoadImage cung cấp một con trỏ đến một IplImage, có nghĩa là nó tạo ra một IplImage khi nó tải nó và trả về bạn đó là emplacement.

Đừng quên làm cvReleaseImage(&img) khi bạn kết thúc, nếu bạn không muốn bị rò rỉ bộ nhớ.

+0

Vì vậy, IplImage là một cấu trúc dữ liệu lưu trữ thông tin biến "img"? Nếu bạn không phiền, tôi muốn hỏi thêm một số câu hỏi trong khi bạn đang ở đây ... Tại sao một con trỏ cần thiết cho IplImage? Nó có nghĩa là gì khi nó nói "Một con trỏ đến một cấu trúc dữ liệu hình ảnh được phân bổ sau đó được trả về"? Cảm ơn bạn – user2521723

+0

Có dữ liệu hình ảnh VÀ con trỏ tới đó được tạo bằng lệnh 'IplImage * img = cvLoadImage (" name.type ")'. Lý do bạn khai báo nó như vậy là tất cả các phương thức cv ... chấp nhận và trả về con trỏ hình ảnh. Sách bạn đang học dựa trên API openCV cũ, được viết trên C. Giờ đây openCV 2.4.5 bản phát hành ổn định mới nhất sử dụng API C++, nơi không cần con trỏ. Cùng với cuốn sách hãy xem tài liệu opencv 2.4.5 và tìm hiểu dễ dàng với các hướng dẫn tuyệt vời tại đó. Trong C++ API 'Mat image = imload (" ");' khai báo không có con trỏ, và các phương thức yêu cầu dữ liệu, không phải con trỏ của nó. – baci