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;}
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为矩阵元素的最大最小值
辅助对象
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;}
来源:CSDN
作者:czkjmohzy
链接:https://blog.csdn.net/weixin_43874764/article/details/104600824