我正忙着尝试了解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 rows
和int height
共享相同的内存位置。如果是这样,我希望行和高度始终具有相同的值。那就意味着我们只能有方形矩阵,我认为OpenCV就是这种情况。那么,即使它是一个联合体,我们怎样才能有两个不同的行和高度值?有人可以告诉我这个结构是如何工作的吗?
非常感谢!
答案 0 :(得分:4)
此处,rows
表示“行数”,与height
基本相同。同样,cols
表示“列数”,只是width
的别名。它们在其他情况下不一定是别名,但就OpenCV而言,它们也被视为同等对象。
这可能是出于向后兼容的原因,the official website lists only rows
and cols
。此外,请注意:
CvMat
现已过时;考虑改为使用Mat
。
答案 1 :(得分:1)
对我来说很有意义。 union
/ rows
为height
,cols
/ width
为union
。因此,您可以选择是否要将水平尺寸调用为列或宽度。
单独的union
s不共享相同的内存,只有"成员"在一个 {{1}}内。