OpenCV学习(2)--基本数据结构

OpenCV的基本数据结构

CvPoint:表示图像中的点

CvPoint2D32f:二维空间中的点

CvPoint3D32f:三维空间中的点

这些都是结构体,并不是C++语言中的类,所以他们的构造函数就是简单的内联函数。

复制代码
 1 typedef struct CvPoint
 2 {
 3     int x;
 4     int y;
 5 }
 6 CvPoint;
 7 
 8 
 9 CV_INLINE  CvPoint  cvPoint( int x, int y )
10 {
11     CvPoint p;
12 
13     p.x = x;
14     p.y = y;
15 
16     return p;
17 }
复制代码

其中的CV_INLINE就是一个宏定义:

1 define CV_INLINE inline

CvSize:表示图像的尺寸

CvSize2D32f:浮点型数据表示图像的尺寸

复制代码
 1 typedef struct CvSize
 2 {
 3     int width;
 4     int height;
 5 }
 6 CvSize;
 7 
 8 CV_INLINE  CvSize  cvSize( int width, int height )
 9 {
10     CvSize s;
11 
12     s.width = width;
13     s.height = height;
14 
15     return s;
16 }
复制代码

CvRect表示图像的部分区域

复制代码
 1 typedef struct CvRect
 2 {
 3     int x;
 4     int y;
 5     int width;
 6     int height;
 7 }
 8 CvRect;
 9 
10 CV_INLINE  CvRect  cvRect( int x, int y, int width, int height )
11 {
12     CvRect r;
13 
14     r.x = x;
15     r.y = y;
16     r.width = width;
17     r.height = height;
18 
19     return r;
20 }
复制代码

CvScalar包含4个浮点型的成员,可以用来表示B、G、R、alpha。它有三个构造函数,具体的定义:

复制代码

typedef struct CvScalar
{
double val[4];
}
CvScalar;


//至少传一个参数,如果后面三个没有,默认为0
CV_INLINE CvScalar cvScalar( double val0, double val1 CV_DEFAULT(0),
double val2 CV_DEFAULT(0), double val3 CV_DEFAULT(0))
{
CvScalar scalar;
scalar.val[0] = val0; scalar.val[1] = val1;
scalar.val[2] = val2; scalar.val[3] = val3;
return scalar;
}


//只对第一个参数赋值,后面的为0
CV_INLINE CvScalar cvRealScalar( double val0 )
{
CvScalar scalar;
scalar.val[0] = val0;
scalar.val[1] = scalar.val[2] = scalar.val[3] = 0;
return scalar;
}


//把四个参数都赋值为传入的那个参数
CV_INLINE CvScalar cvScalarAll( double val0123 )
{
CvScalar scalar;
scalar.val[0] = val0123;
scalar.val[1] = val0123;
scalar.val[2] = val0123;
scalar.val[3] = val0123;
return scalar;
}


复制代码

CvArr、CvMat和IplImage关系

派生关系为:CvArr-->CvMat-->IplImage,当CvArr用作函数的参数的时候,无论传入的是CvMat还是IplImage,内部都是按CvMat处理。

posted @   stemon  阅读(718)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥
点击右上角即可分享
微信分享提示