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 Vec<uchar,2> 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<<temp;
 }
 fs.release();//end read

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

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

数组类型
这里写图片描述
map形式:
这里写图片描述

 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();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值