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处理。

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

时间: 2024-11-03 21:36:30

OpenCV学习(2)--基本数据结构的相关文章

《学习opencv》笔记——基本数据结构,CvMat,矩阵访问

    老板让让做一个东东,输入端要用到opencv顺便就来学习一下.买了本书<学习opencv>翻来一看,opencv1.0,去官网上一看,opencv2.49,瞬间有种蛋碎的赶脚.看着第二章介绍一个头文件,在opencv2.49下面招了半天都没找到...泪奔~~     不过看到一些论坛上说,这本书里还是讲了一些有用的算法的,所以还是决心仔细读一读,里面的测试程序基本是亲手输入运行成功的,很多例子我自也用不同的方法实现了一下,毕竟入门级新手.望各位老鸟勿喷.还请各位大手多多指点.    

《学习opencv》笔记——IplImage数据结构

1.IplImage数据结构 (1)IplImage的结构 typedef struct _IplImage { int nSize; //IplImage大小 int ID; //ID int nChannels; //通道数,大多数OPENCV函数支持1,2,3 或 4 个通道. int alphaChannel; int depth; //像素的位深度: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U, IPL_DEPTH_16S, IPL_DEPTH_

OpenCV学习笔记(六十二)——《OpenCV Computer Version with Python》阅读摘要

现在python火啊,每次OpenCV自带的ml模块都让我直呼坑爹,索性准备用python来做OpenCV后期的机器学习算法的处理.于是赶紧拿起这本书读读. 适合OpenCV和python都有一定基础的....由于都比较熟悉这两个东西,我阅读之前比较关心的只有几个问题,具体的应用实例没有仔细看. 1.如何在python中安装opencv 2.OpenCV的Mat数据结构能否方便的转换成numpy的array结构 3.OpenCV的GUI模块在python里好用么 4.二者还能擦出什么我想不到的火

OpenCV 学习(利用滤波器进行边缘提取)

OpenCV 学习(利用滤波器进行边缘提取) 通过低通滤波器,我们可以将图像平滑,相反的,利用高通滤波器可以提取出图像的边缘. Sobel 滤波器 Sobel 滤波器是一种有方向性的滤波器,可以作用在 X 方向或 Y 方向. 关于这种滤波器的理论介绍可以参考: https://en.wikipedia.org/wiki/Sobel_operator 函数原型如下: void Sobel( InputArray src, OutputArray dst, int ddepth, int dx, i

OpenCV学习之六: 使用方向梯度直方图估计图像旋转角度

在备份ltedecoder程序时,需要把此目录拷由到bak目录下,但decoder目录下有个大文件,不需要备份,还有日志问题,也不需要备份,如何实现呢?? 方法: cd /source-dir find . -name .snapshot -prune -o -print0 | cpio -pmd0 /dest-dir 解释: This command copies the contents of /source-dir to /dest-dir, but omits files and dir

Opencv学习笔记(六)SURF学习笔记

原创文章,转载请注明出处:http://blog.csdn.net/crzy_sparrow/article/details/7392345 本人挺菜的,肯定有非常多错误纰漏之处 ,希望大家不吝指正. 看了harris角点检測之后,開始研究SURF角点检測,发现挺复杂的,一时也仅仅了解了大概,把了解的东西总结下,以便下次深入学习. SURF角点检測算法是对SIFT的一种改进,主要体如今速度上,效率更高.它和SIFT的主要差别是图像多尺度空间的构建方法不同. 在计算视觉领域,尺度空间被象征性的表述

opencv学习笔记(四)投影

opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: 1 #include <cv.h> 2 #include <highgui.h> 3 using namespace std; 4 using namespace cv; 5 int main() 6 { 7 IplImage * src = cvLoadImage("cat.png", 0); //强制转化读取图像为灰度图 8 cvShowImage("灰度图像", s

视图动画学习算法和数据结构(二)(&lt;Garry进阶(四)&gt;)

转载请注明: 接视图动画学习算法和数据结构(不定期更新)() 快速排序(QuickSort) 动画演示: java代码: public class QuickSort { private int array[]; private int length; public void sort(int[] inputArr) { if (inputArr == null || inputArr.length == 0) { return; } this.array = inputArr; length

OpenCV学习笔记(一)安装及运行第一个OpenCV程序

1.下载及安装 OpenCV是一套开源免费的图形库,主要有C/C++语言编写,官网: http://opencv.org/ .在 http://opencv.org/downloads.html 可以找到个版本和各种平台的程序包.OpenCV的Windows平台安装包是放在SourceForge.net网站. 我下了2.4.4版,大概217M.安装包其实就是一个压缩包,安装过程就是解压到某个文件夹.我是安装到 E:\Soft\opencv 目录,安装后文件夹如下: 我们只需要关注“build”文