zoukankan      html  css  js  c++  java
  • IplImage类型解释和举例

    1.IplImage结构

    typedef struct _IplImage
    {
        int  nSize;         /* sizeof(IplImage) */
        int  ID;            /* version (=0)*/
        int  nChannels;     /* Most of OpenCV functions support 1,2,3 or 4 channels */
        int  alphaChannel;  /* ignored by OpenCV */
        int  depth;         /* pixel depth in bits: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16S,
                               IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F are supported */
        char colorModel[4]; /* ignored by OpenCV */
        char channelSeq[4]; /* ditto */
        int  dataOrder;     /* 0 - interleaved color channels, 1 - separate color channels.
                               cvCreateImage can only create interleaved images */
        int  origin;        /* 0 - top-left origin,
                               1 - bottom-left origin (Windows bitmaps style) */
        int  align;         /* Alignment of image rows (4 or 8).
                               OpenCV ignores it and uses widthStep instead */
        int  width;         /* image width in pixels */
        int  height;        /* image height in pixels */
        struct _IplROI *roi;/* image ROI. if NULL, the whole image is selected */
        struct _IplImage *maskROI; /* must be NULL */
        void  *imageId;     /* ditto */
        struct _IplTileInfo *tileInfo; /* ditto */
        int  imageSize;     /* image data size in bytes
                               (==image->height*image->widthStep
                               in case of interleaved data)*/
        char *imageData;  /* pointer to aligned image data */
        int  widthStep;   /* size of aligned image row in bytes */
        int  BorderMode[4]; /* ignored by OpenCV */
        int  BorderConst[4]; /* ditto */
        char *imageDataOrigin; /* pointer to very origin of image data
                                  (not necessarily aligned) -
                                  needed for correct deallocation */
    }
    IplImage;

    2.pImgROI举例

    nSize=0:sizeof(pImgROI)函数的结果,所以它总共占用了112个byte,不包含这一个帧整个的图像数据,而只是包含了pImgROI这个数据结构

          整个帧的图像数据存放在imageData处,它所占用的空间大小可以这样来计算:

          imageSize=762048=pImgROI->height * widthStep=672 * 2016

          可以注意到 2016 = 3 * 672

          我们可以知道 762048 = pImgROI->height * pImgROI->width * 3 (估计是通道数)

          在设置了ROI的值之后,图像大小,width以及height也是完全没有发生变化的。

    nChannels=3 :三通道图像

    depth=8:参照cxtypes.h中的宏定义

    #define IPL_DEPTH_1U     1
    #define IPL_DEPTH_8U     8
    #define IPL_DEPTH_16U   16
    #define IPL_DEPTH_32F   32

      可知,这个帧采用了了IPL_DEPTH_8U类型,即无符号整形来存储一个点的像素信息。

    origin=1:表示底左格式的图像,左下角是(0,0)点

    roi:使用下面代码设置roi之后

            cvSetImageROI(pImgROI,cvRect(x,y,w,h)); //cvSetImageROI的功能是基于给定的矩形设置图像的ROI(感兴趣区域)

    roi区域的值就发生变化

    coi表示channel of  interest (感兴趣的通道)

     imageData:包含一个指向第一行图像数据的指针。

     部分参考自《学习OpenCV》

    另外,可以查阅http://blog.sciencenet.cn/home.php?mod=space&uid=297739&do=blog&id=251363

    一下两个属性为个人臆测:

    colorModel:说明这个是什么类型的图片,HSV,RGB,Gray,就是一个说明而已

    channelSeq:说明了存储顺序,如图就是以B,G,R顺序存储

    图片:

    第(width-1)行  BGR BGR BGR BGR BGR

    ……

    第三行 y=2    BGR BGR BGR BGR BGR

    第二行 y=1    BGR BGR BGR BGR BGR

    第一行 y=0    BGR BGR BGR BGR BGR

                X=0    1    2     3     ……

  • 相关阅读:
    java exception
    【洛谷P1627】 【CQOI2009】中位数
    切蛋糕
    【NOIP2015Day2T2】【洛谷P2679】子串
    【NOIP2017Day1T3】【洛谷P3953】逛公园
    【bzoj1082】【SCOI2005】栅栏
    搬砖
    花花的森林
    跳跳棋
    异或
  • 原文地址:https://www.cnblogs.com/jun14/p/2859520.html
Copyright © 2011-2022 走看看