OpenCV(一)

扶醉桌前 提交于 2020-03-03 01:36:16

OpenCV基础数据类型

Point

二维点和三维点,整型点和浮点数点

cv::Point2i p;  // 2代表二维,i代表整型cv::Poin3f p; // 3代表三维,f代表浮点数cv::Point2i p(x, y); // 构造点cv::Point3i p(x, y, z); cv::Point3f p1(p2); // 复制P2到P1p.x, p.y // 访问二维点的坐标 x = p1.dot(p2) // 点乘p1.cross(p2) // 叉乘

Vec<double 19> myVector; //定义一个19个组件且样本均为双精度数的向量

size类

包含 width, height两个成员,和二维点类似

Rect类

矩形类包括Point的x,y(左上角点的坐标)和size的width, height两个成员(表示矩形的大小)

cv::Rect r; // 默认构造函数cv::Rect r2(r1); // 复制构造函数cv::Rect r(x,y,w,h); //值构造函数cv::Rect r(point,size); //起始点和大小构造cv::Rect r(p1,p2); //对角两点构造r.x; r.y; r.width; r.height; //成员访问r.area(); //面积计算r.tl(); //左上角r.br(); //右下角r.contains(p); //判断p是否在r内cv::Rect r3=r1&r2;r1 &= r2;//取交集cv::Rect r3=r1|r2;r1 |= r2; //同时包含r1,r2的最小矩形cv::Rect rx = r+x; r += x; //左上角平移,x为pointcv::Rect rs = r+s; r += s; //扩大width,height, s为size

固定矩阵类

已知维度的矩阵,运算很快

cv::Matx33f m33f; // 构造一个3*3的浮点型矩阵,名为m33fcv::Matx22d m22d(n22d); // 复制构造函数cv::Matx22d m(x0, x1, x2, x3); //值构造函数m33f = cv::Matx33f::all(x); // 含相同元素的矩阵m23d = cv::Matx23d::zeros(); // 全零矩阵m16f = cv::Matx16f::ones(); // 全一矩阵m33f = cv::Matx33f::eye(); // 单位矩阵m33f = cv::Matx33f::randu(min, max); // 创建一个均匀分布的矩阵,数来自均匀分布m33f = cv::Matx33f::nrandn( mean, variance); //创建一个正态分布的矩阵m1.dot(m2); // 点积m1.ddot(m2); //同上m91f = m33f.reshape<9,1>(); // 改变矩阵形状minMaxLoc(src,minval, maxval, minLoc, maxLoc); scr为输入矩阵, minval, maxval为矩阵元素的最大最小值

cv::Complexf z1; cv::Complexd z2; cv::Complexd z2(z1); cv::Complexd z1(re0, im1); z1.re; z1.im z2 = z1.conj(); //取共轭复数

辅助对象

TermCriteria 类

算法终止条件的封装,有三个成员变量(type, maxCount, epsilon)
type是终止条件的类型,有cv::TermCriteria::COUNT和cv::TermCreteria::EPS两种,分别为达到固定迭代次数后退出和算法收敛相关度量降到EPS以下后退出
构造函数TermCriteria( int type, int maxCount, double epsilon)

Range类

确定一个连续的整数序列,有两个成员(start, end)
包含start, 不包含end,使用range.size()可以得到range的元素个数,cv::Range::empty()可以判断是否为空
构造函数 cv::Range(int start, int end)

Ptr模板和垃圾收集

智能指针可以帮助优化内存
实例方法:
cv::Ptr< Matx33f > p(new cv::Matx33f) 或者 cv::Ptr< Matx33f > p = makePtr< cv::Matx33f >

图像与大型数组类型

图像以矩阵形式存储,并以行列编号来引用,彩色图像使用宽度x高度x通道数的矩阵。8位彩色图像的类型名称为Vec3b类(Vec=向量, 3=组件数, b=一个字节),灰度图像直接用uchar无符号字符来存储。

数据存储

OpenCV提供了XML/YAML持久层来保存计算结果。

#include<opencv2/opencv.hpp>using namespace cv;int main(int, char** argv) {	// create writer	FileStorage fs("test.yml", FileStorage::WRITE);	// save an int	int fps = 5;	fs << "fps" << fps;	// create some mat sample	Mat m1 = Mat::eye(2, 3, CV_32F);	Mat m2 = Mat::ones(3, 2, CV_32F);	Mat result = (m1 + 1).mul(m1 + 3);	// write the result	fs << "results" << result;	// release the file	fs.release();	//reload	FileStorage fs2("test.yml", FileStorage::READ);	Mat r;	fs2["results"] >> r;	std::cout << r << std::endl;	fs2.release();	return 0;}
发布了22 篇原创文章 · 获赞 1 · 访问量 1228
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!