如何在这个OpenCV库中使用联合?

时间:2014-12-31 12:51:13

标签: c++ opencv

我正忙着尝试了解OpenCV,但有一部分我不明白。这可能是一个容易回答的问题,但我仍然坚持,并希望得到你的回答。在OpenCV中,矩阵实现如下:

typedef struct CvMat {
  int type;
  int step;
  int* refcount;
  union {
    uchar* ptr;
    short* s;
    int* i;
    float* fl;
    double* db;
  } data;
  union {
    int rows;
    int height;
  };
  union {
    int cols;
    int width;
  };
} CvMat;

据我了解,联盟意味着int rowsint height共享相同的内存位置。如果是这样,我希望行和高度始终具有相同的值。那就意味着我们只能有方形矩阵,我认为OpenCV就是这种情况。那么,即使它是一个联合体,我们怎样才能有两个不同的行和高度值?有人可以告诉我这个结构是如何工作的吗?

非常感谢!

2 个答案:

答案 0 :(得分:4)

此处,rows表示“行数”,与height基本相同。同样,cols表示“列数”,只是width的别名。它们在其他情况下不一定是别名,但就OpenCV而言,它们也被视为同等对象。

这可能是出于向后兼容的原因,the official website lists only rows and cols。此外,请注意:

  

CvMat现已过时;考虑改为使用Mat

答案 1 :(得分:1)

对我来说很有意义。 union / rowsheightcols / widthunion。因此,您可以选择是否要将水平尺寸调用为列或宽度。 单独的union s不共享相同的内存,只有"成员"在一个 {{1}}内。