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

How is the union used in this OpenCV library?

本文关键字:何使用 OpenCV      更新时间:2023-10-16

我正忙于学习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中并非如此。那么,即使它是并集,我们怎么能有两个不同的行和高度值呢?有人可以启发我这个结构是如何工作的吗?

谢谢!

在这里,rows的意思是"行数",本质上与height相同。 同样,cols的意思是"列数",只是width的别名。它们在其他上下文中不一定是别名,但就 OpenCV 而言,它们被视为别名。

这可能是出于向后兼容性的原因,因为官方网站只列出了rowscols。 此外,请注意:

CvMat现已过时;请考虑改用Mat

对我来说

非常有意义。您有一个用于 rows/heightunion和一个用于 cols/width 的。因此,您可以选择是喜欢将水平维度称为列还是宽度。单独的union不共享相同的内存,只有一个union内的"成员"。