"); //-->
opencv里面关于CVMAT类型的定义:
typedef struct CvMat
{
int type;
int step;
/* for internal use only */
int* refcount;
int hdr_refcount;
union
{
uchar* ptr;
short* s;
int* i;
float* fl;
double* db;
} data;
#ifdef __cplusplus
union
{
int rows;
int height;
};
union
{
int cols;
int width;
};
#else
int rows;
int cols;
#endif
}
CvMat;
最近写一个代码的时候,浏览一下OPENCV的源码,觉得共用体在这里还是挺方便的,但是弄不清中间的存储结构就不会很好的使用这个结构。
一、 共用体的使用大概有这几点:
1.共用体的定义和结构体差不多
union
{
uchar* ptr;
short* s;
int* i;
float* fl;
double* db;
} data;
2.共用体顾名思意就是里面的的数据占用同一断内存空间,共用体的内存长度等于里面最长的变量。既然占用一段内存空间,你改变任意一个共用体的变量都会改变其他 的成员,而且你不能在同一时刻使用里面的2个变量
二、指针的使用
data共用体里面有好几种类型,如果你想写一个创建矩阵的函数,例如:
/*************************************************
函数名: CreateMatHeader
函数作用 :创建一个矩阵
参数:
cols 列数
rows 行数
type 数据类型
data 数据指针
返回:矩阵的头指针
说明:函数在使用的时候,如果data == NULL ,则创建空间
**************************************************/
CMat *CreateMat(uint cols,uint rows,MAT_DATA_TYPE type, void *data);
你事先不知道DATA的时候类型,VOID*类型不会提供关于数据长度的信息,所以在使用union data的时候你可以对数据类型进行判断,但是这样毕竟太麻烦了,最好的方法是使用union共占一段结构体的特点:直接对字节进行操作,在需要的时候再去转换为其他类型的指针
我做的一个小实验:
void main(void)
{
float pl = (float)5.98789; //浮点数指针
float *data ;
unsigned char *c ;
c =(unsigned char*) malloc(2*sizeof(float));
memcpy(c,&pl,sizeof(float));
data = (float*)c ;
printf("%f",*data);
}
我把浮点数据copy到char类型的指针下,在通过转换为浮点类型,然后输出。。。
三、VC里面的内存分配的问题
1.不同编译器分配的内存
(1)在VC下,下面各类型占字节数为:char->unsigned int ->1; short int ->2; int ->unsigned int ->4; long ->float->4; double ->long double ->8
(2)在TC下,下面各类型占字节数为:char->unsigned int ->1; short int ->2; int ->unsigned int ->2; long ->float->4; double ->8; long double ->10
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
高通的18核 Snapdragon X2 Elite Extreme在基准测试中占据主导地位
国防工业检测的特殊性及策略
GAA晶体管市场规模、份额和趋势预测(2034)
电视图纸\\创维彩电(PDF)\\200683020563386483
电路板级可测试性设计与验证评估技术
欧洲推动光子学占据主导地位
ASML的设备是制造AI芯片的关键,但为什么它错过了AI红利
非大陆供应链领军12寸SiC突围先进封装 中国也乐见其成
英特尔瞄准了AMD Threadripper及其新Granite Rapids-WS CPU
欧盟推动《芯片法案 2.0》投资
网迷们,给你们推荐一个新的活动空间!
周日八大处一日游[贴图]
使用发光二极管和运算放大器的400Hz正弦波电路
AI 驱动图形化 MCU 配置器选择器
最专业的基于S3C2410的ARM9开发系统,最顶级的配置,最全最多的开发工具和资料
请问有没人成功移植了gui3.9版本的阿???
新型机翼系统鸟类机器人实现自起飞和低速飞行
相移正弦波振荡电路
[求助]新做销售,请各位关照
卫星导航产品模拟测试技术及应用
电视图纸\\创维彩电(PDF)\\200671213372035628
频率可调幅度不变的正弦振荡器
电视图纸\\创维彩电(PDF)\\200683020544529744
电视图纸\\创维彩电(PDF)\\200683020552394553
大嘴业话:国防电子路在何方
面向军工的自动化测试,维护与诊断
双相输出正弦波振荡器
电视图纸\\创维彩电(PDF)\\200683020572256090
Anthropic推出全新旗舰Claude Sonnet 4.5 模型,创下AI编码记录
正弦波发生器