opencv 基本数据结构
来源:互联网 发布:linux vi编辑器例题 编辑:程序博客网 时间:2024/04/27 23:30
opencv 基本数据结构
DataType : 将C++数据类型转换为对应的opencv数据类型
enum { CV_8U=0, CV_8S=1, CV_16U=2, CV_16S=3, CV_32S=4, CV_32F=5, CV_64F=6 };
// allocates a 30x40 floating-point matrix // CV_32FMat A(30, 40, DataType<float>::type);Mat B = Mat_<std::complex<double> >(3, 3);// the statement below will print 6, 2 /*, that is depth == CV_64F, channels == 2*/ CV_64FC2cout << B.depth() << ", " << B.channels() << endl;
Point_ 二维点坐标(x,y)
typedef Point_<int> Point2i;typedef Point2i Point;typedef Point_<float> Point2f;typedef Point_<double> Point2d;
Point3_ 3维点坐标(x,y,z)
typedef Point3_<int> Point3i;typedef Point3_<float> Point3f;typedef Point3_<double> Point3d;
Size_ 尺寸(width, height)
typedef Size_<int> Size2i;typedef Size2i Size;typedef Size_<float> Size2f;
Rect_ 矩形区域(x,y,width,height) ,(x,y)左上角坐标, 范围[x, x + width), [y, y + height)
rect = rect ± point //矩形偏移(shifting a rectangle by a certain offset)rect = rect ± size //改变大小(expanding or shrinking a rectangle by a certain amount)rect += point, rect -= point, rect += size, rect -= size //(augmenting operations)rect = rect1 & rect2 //矩形交集(rectangle intersection)rect = rect1 | rect2 //包含r1r2的最小矩形(minimum area rectangle containing rect2 and rect3 )rect &= rect1, rect |= rect1 //(and the corresponding augmenting operations)rect == rect1, rect != rect1 //(rectangle comparison)
RotatedRect 旋转矩形
RotatedRect::RotatedRect(const Point2f& center, const Size2f& size, float angle)// 中心点(不是左上角坐标),尺寸,旋转角度RotatedRect rRect = RotatedRect(Point2f(100,100), Size2f(100,50), 30);
Matx 小矩阵
template<typename_Tp, int m, int n> class Matx {...};typedef Matx<float, 1, 2> Matx12f;typedef Matx<double, 1, 2> Matx12d;...typedef Matx<float, 1, 6> Matx16f;typedef Matx<double, 1, 6> Matx16d;typedef Matx<float, 2, 1> Matx21f;typedef Matx<double, 2, 1> Matx21d;...typedef Matx<float, 6, 1> Matx61f;typedef Matx<double, 6, 1> Matx61d;typedef Matx<float, 2, 2> Matx22f;typedef Matx<double, 2, 2> Matx22d;...typedef Matx<float, 6, 6> Matx66f;typedef Matx<double, 6, 6> Matx66d;Matx33f m(1, 2, 3,4, 5, 6,7, 8, 9);cout << sum(Mat(m*m.t())) << endl;//Matx转化为Mat
Vec 短向量,基于Matx
template<typename_Tp, int n> class Vec : public Matx<_Tp, n, 1> {...};typedef Vec<uchar, 2> Vec2b;typedef Vec<uchar, 3> Vec3b;typedef Vec<uchar, 4> Vec4b;typedef Vec<short, 2> Vec2s;typedef Vec<short, 3> Vec3s;typedef Vec<short, 4> Vec4s;typedef Vec<int, 2> Vec2i;typedef Vec<int, 3> Vec3i;typedef Vec<int, 4> Vec4i;typedef Vec<float, 2> Vec2f;typedef Vec<float, 3> Vec3f;typedef Vec<float, 4> Vec4f;typedef Vec<float, 6> Vec6f;typedef Vec<double, 2> Vec2d;typedef Vec<double, 3> Vec3d;typedef Vec<double, 4> Vec4d;typedef Vec<double, 6> Vec6d;
Scalar_ 四维向量
template<typename_Tp> class Scalar_: public Vec<_Tp, 4> { ... };typedef Scalar_<double> Scalar;
Range 范围,(start, end)
Mat m(300,300,CV32F);Mat part = m(Range::all(), Range(20, 200)); // 相当于matlab的m(:, 20 : 199) 取部分行的全部列
对于自定义的函数,可以用如下方法来支持Range
void my_function(..., const Range& r, ....){ if(r == Range::all()) { // process all the data, 使用全部数据 } else { // process [r.start, r.end),根据r中定义, 处理数据 start : end - 1 }}
###Mat 矩阵结构
M.data 数据区域的指针M.dims 矩阵维度M.sizes 维度M.elemSize() 每个元素占的字节空间大小,与元素类型相关,如CV_8UM.step[] 用来计算元素地址, M.step[i] 表示所有比i大的维度所占空间大小M.step[i] >= M.step[i+1]*M.sizes[i+1]; //这里大于是因为数据空间可能有空白2-dimensional matrices are stored row-by-row3-dimensional matrices are stored plane-by-planeaddr(M(i(0),...,i(M.dims−1))) = M.data + M.step[0] ∗ i(0)+ M.step[1] ∗ i(1)+ ... + M.step[M.dims − 1] ∗ i(M.dims−1)
创建数组:
// make a 7x7 complex matrix filled with 1+3j.Mat M(7,7,CV_32FC2,Scalar(1,3));// and now turn M to a 100x60 15-channel 8-bit matrix.// The old content will be deallocatedM.create(100,60,CV_8UC(15));// create a 100x100x100 8-bit arrayint sz[] = {100, 100, 100};Mat bigCube(3, sz, CV_8U, Scalar::all(0));
创建特殊矩阵:
diag
ones
zeros
eye
属性相关:
rows
cols
begin
end
at
size
depth
type
elemSize
total
矩阵操作:
t
inv
mul
cross
dot
reshape
resize
reserve
push_back
pop_back
赋值相关:
clone
copyTo
convertTo
assignTo
setTo
InputArray&OutputArray
//Do not explicitly create InputArray, OutputArray instancesvoid myAffineTransform(InputArray_src, OutputArray_dst, InputArray_m){ // get Mat headers for input arrays. This is O(1) operation, // unless_src and/or_m are matrix expressions. Mat src =_src.getMat(), m =_m.getMat(); CV_Assert( src.type() == CV_32FC2 && m.type() == CV_32F && m.size() == Size(3, 2) ); // [re]create the output array so that it has the proper size and type. // In case of Mat it calls Mat::create, in case of STL vector it calls vector::resize. _dst.create(src.size(), src.type()); Mat dst =_dst.getMat(); for( int i = 0; i < src.rows; i++ ) for( int j = 0; j < src.cols; j++ ) { Point2f pt = src.at<Point2f>(i, j); dst.at<Point2f>(i, j) = Point2f(m.at<float>(0, 0)*pt.x + m.at<float>(0, 1)*pt.y + m.at<float>(0, 2), m.at<float>(1, 0)*pt.x + m.at<float>(1, 1)*pt.y + m.at<float>(1, 2)); }}
0 0
- opencv 基本数据结构
- opencv基本数据结构
- opencv 基本数据结构
- opencv 基本数据结构
- opencv 基本数据结构
- opencv 基本数据结构
- opencv基本数据结构
- opencv 基本数据结构
- OpenCV基本数据结构
- OpenCV基本数据结构操作
- Opencv基本数据结构
- opencv的基本数据结构
- opencv的基本数据结构
- opencv 基本数据结构
- 【OpenCV】基本数据类型、IplImage数据结构
- OpenCV学习——基本数据结构
- OpenCV 学习笔记 [1] 基本数据结构, CvMat
- OpenCV笔记(三)基本数据结构
- leetcode Kth Largest Element in an Array
- 百度云推送pkg_content参数 到达指定activity
- 收获,不止Oracle 完整版
- android studio编码格式设置
- vim命令
- opencv 基本数据结构
- iOS怎样做版本更新,获取Appstore上的版本号和项目中的版本号
- Linux文件系统简介
- securecrt学习之(一)常用快捷方式
- PHP pdo使用总结
- ioctl()函数详解
- get 请求乱码处理 (随时拿来用)
- 开源大数据处理工具汇总(上)
- 关于游客账户创建的问题