OpenCV Core模块

OpenCV core模块提供了基本数据结构,Mat,Point,Rect,Size,Scalar等常用的数据结构类型都是在这个模块中定义。
Scalar()表示具有4个元素的数组,在OpenCV中被大量用于传递像素值,如RGB颜色值。而RGB颜色值为三个参数,其实对于Scale函数来说,如果用不到第四个参数,则不需要写出来,若只写三个参数,OpenCV会认为我们就想表示三个参数。
Scalar类的源头为Scalar_类,而Scalar_类是Vector4x的一个变种,我们常用的Scalar其实就是Scalar_< double >类型,这也就是为什么很多函数的参数输入可以是Mat,也可以是Scalar。
Size注意如下定义就行:

typedef Size_<int> Size2i;
typedef Size2i Size;

和Point的定义有类型的定义。

Rect支持平移和缩放操作,如下:
Rect rect(0,0,100,120);
Point pt(1,2);
Size size(20,20);
//rect = rect + pt; //将矩形平移到点 1,2上去
rect = rect + size; //将矩阵的大小长宽都加上20。

颜色空间转换: cvtColor函数

Vector是Matx的一个派生类,是一个一维的Matx,跟vector很相似。在opencv源码中有如下的定义:

template<typename _Tp,int n> class Vec : public Matx<_Tp,n,1>{}

typedef Vec2> Vec2b;

显示文字的相关函数:
getTextSize,cvInitFont,PutText
作图相关额函数有:
circle,clipLine,ellipse,ellipse2Poly,line,rectangle,polylines。

fillPoly方法:

Point points[1][4];
points[0][0] = Point(0,0); 
points[0][1] = Point(100,10); 
points[0][2] = Point(30,60); 
points[0][3] = Point(10,100); 
const Point* ppt[1]={points[0]};
int npt[]={4};
fillPoly(src,ppt,npt,1,Scalar(0,0,255));
  • FileStorage类操作文件
    XML和YAML格式是使用非常广泛的文件格式,可以利用XML或者YAML格式的文件存储和还原各式各样的数据结构。他们也可以存储和载入任何复杂的数据结构或各种基本原始数据类型,如整数和浮点数,字符串。

我们一般使用如下过程来写入或读取数据到XML或YAML文件中。
(1)实例化一个FileStorage类的对象,用默认带参数的构造函数完成初始化,或者用FileStorage::open()成员函数辅助初始化
(2)使用流操作符<<进行文件写入操作,或者使用>>进行文件读取操作。
(3)使用FileStorage::release()函数析构掉FileStorage类对象,同时关闭文件。
如下:

//写操作
FileStorage fs("abc.xml",FileStorage::WRITE);
//读操作
FileStorage fs("abc.xml",FileStorage::READ);

进行简单的文本和数字读写操作:

fs<<"iterationNr"<<100;//写入

int itNr;
fs["iterationNr"]>>itNr;
itNr = (int)fs["iterationNr"];

OpenCV数据结构的写入和读取:
Mat R,T;
…//ini R and T
fs<<”R”<

 FileStorage fs("1.xml",FileStorage::WRITE);
 fs<<"strings"<<"[";
 fs<<"image1.jpg"<<"image2.jpg";
 fs<<"]";
 fs.release();//end write

 fs.open("1.xml",FileStorage::READ);
 FileNode n = fs["strings"];
 if (n.type()!=FileNode::SEQ)
 {
     return -1;//erro occur
 }
 FileNodeIterator it = n.begin(),end = n.end();
 for (;it!=end;it++)
 {
    string temp = (string)*it;
    cout<//end read

如果是vector类型,直接写入就行,不需要人工加上[ ]符。

 fs<<"strings";
 vector<string> strings;
 strings.push_back("image1.jpg");
 strings.push_back("image2.jpg");
 fs<

数组类型
OpenCV Core模块_第1张图片
map形式:
OpenCV Core模块_第2张图片

 FileStorage fs2("2.xml",FileStorage::WRITE);
 fs2<<"Mapping";
 fs2<<"{"<<"One"<<1;
 fs2<<"Two"<<2;
 fs2<<"}";
 fs2.release();
 fs2.open("2.xml",FileStorage::READ);
 FileNode n2 = fs2["Mapping"];
 if (n2.type()!=FileNode::MAP)
 {
     return -1;//erro occur
 }

 int one = (int)n2["One"];
 int two = (int)n2["Two"];
 fs2.release();

你可能感兴趣的:(计算机视觉与机器学习)