
OpenCV基础数据类型
发布日期:2021-05-04 19:17:36
浏览次数:55
分类:精选文章
本文共 3450 字,大约阅读时间需要 11 分钟。
1. 基础数据类型(basic data types)
首先记住六种数据类型:
- b = unsigned char
- w = unsigned short
- s = short
- i = int
- f = float
- d = double
Point 类
Point类是OpenCV中最基础、最简单的类型。
操作 | 例子 |
---|---|
默认构造 | cv::Point2i p; cv::Point3f p; |
拷贝构造 | cv::Point3f p2( p1 ); |
赋值 | cv::Point2i p( x0, x1); cv::Point3d p( x0, x1, x2 ); |
强制转换类型 | (cv::Vec3f) p; |
访问成员 | p.x; p.y; //三维的话:p.z |
点积 | float x = p1.dot( p2 ); //点积是对应元素相乘再向加 |
双精度点积 | double x = p1.ddot( p2 ); |
叉乘 | p1.cross( p2 ); //只有三维点类有用,返回值为Point类 |
判断点是否在矩形内 | p.inside( r ); //只对二维点有效,返回值为bool |
Scalar 类
标量类,用来平移图像或者用于Mat颜色通道的赋值。
操作 | 例子 |
---|---|
默认构造 | cv::Scalar s; |
拷贝构造 | cv::Scalar s2( s1 ); |
赋值构造 | cv::Scalar s ( x0 ); cv::Scalar s( x0, x1, x2, x3 ); |
逐元素乘法 | s1.mul( s2 ); //相同位置元素相乘,返回同类型s2 = [5, 2, 3, 4]s1 = [1, 2, 3, 4]s1.mul(s2) = [5, 4, 9, 16] |
(四元数)共轭 | s.conj(); // ( returns cv::Scalar(s0, -s1, -s2, -s3)) |
(四元数)为真 | s.isReal(); // ( returns true if s1s2s3==0) |
Size 类
定义一个有大小的矩形框,帮助构造Rect、Mat等
操作 | 例子 |
---|---|
默认构造 | cv::Size sz;cv::Size2i sz;cv::Size2f sz; |
拷贝构造 | cv::Size sz2( sz1 ); |
赋值构造 | cv::Size2f sz( w, h ); //w = width, h = height |
访问成员 | sz.width;sz.height; |
计算面积 | sz.area(); |
Rect 类
感兴趣区间
操作 | 例子 |
---|---|
默认构造 | cv::Rect r; |
拷贝构造 | cv::Rect r2 ( r1 ); |
赋值构造 | cv::Rect r( x, y, w, h); |
从点(point类)和大小(size类)来构造 | cv::Rect r( p, sz ); |
两个点来构造 | cv::Rect r( p1, p2 ); |
访问成员 | r.x; r.y; r.width; r.height; |
面积 | r.area(); |
左上角的点 | r.tl(); |
右下角的点 | r.br(); |
点p是否在矩形rect内 | r.contains( p ); |
关于Rect的函数重载 | 例子 |
---|---|
两矩形交集(r1 和 r2) | cv::Rect r3 = r1 & r2;r1 &= r2; |
包含两矩阵最小区域(r1 和 r2) | cv::Rect r3 = r1 | r2;r1 |= r2; |
平移( r 平移 x(用Point来构造)) | cv::Rect rx = r + x;r += x; |
扩大( r 扩大 s(用Size来构造)) | cv::Rect = rs = r + s;r += s; |
判断相等 | bool eq = ( r1 == r2 ); |
判断不相等 | bool ne = ( r1 != r2); |
RotatedRect 类
-
cv::Point2f 用于定义 center
-
cv::Size2f 用于定义 size
-
float 用于定义 angle
操作 | 例子 |
---|---|
默认构造 | cv::RotatedRect rr(); |
拷贝构造 | cv::RotatedRect rr2( rr1 ); |
赋值构造(从三点构造) | cv::RotatedRect( p1 , p2, p3 ); |
赋值构造(从中心点、尺寸、旋转角度) | cv::RotatedRect( p, sz, theta ) |
访问成员 | rr.center; rr.size; rr.angle; |
返回列表(四个点的坐标) | rr.points ( pts[4] ); |
注:返回列表依次为(pts[0] – 左下角、pts[1] – 右下角、pts[2] – 右上角、pts[3] – 左上角)
Matx 类(固定尺寸)
-
固定矩阵类的大小固定,往往比较小,编译速度很快
-
形式如: cv::Matx{1,2,3,…}{1,2,3,…}{f, d}
-
图片或者大型点构成的数组不适用
操作 | 例子 |
---|---|
默认构造 | cv::Matx33f m33f;cv::Matx43d m43d |
拷贝构造 | cv::Matx22d m22d( n22d ); |
赋值构造 | cv::Matx21f m(x0, x1);cv::Matx33d m(x0,x1,x2,x3,x4,x5,x6,x7,x8); |
赋特殊值 | m33f = cv::Matx33f::all( x ); |
赋0 | m23d = cv::Matx23d::zeros(); |
单位矩阵 | m33f = cv::Matx33f::eye(); |
接收主对角的元素 | cv::Matx31f m31f = m33f.diag(); |
均匀分布条目的矩阵 | m33f = cv::Matx33f::randu( min, max ); |
正态分布条目的矩阵 | m33f = cv::Matx33f::randn( mean, variance ); |
访问成员 | m( i , j );m( i ); //一维矩阵有效 |
矩阵算术 | m1 = m0;m0 * m1;m0 + m1;m0 - m1; |
数乘 | m * a; a * m; m / a; |
比较 | m1 == m2; m1 != m2; |
点积 | m1.dot( m2 );m1.ddot( m2 ); //双精度 |
Reshape | m91f = m33f.reshape<9,1>(); |
强制转换 | m44f = (Matx44f)m44d; |
在某点(0,1)提取axb(2x3)的矩阵 | Matx23f m23f = m44f.get_minor<2,3>(0,1); |
提取行 | m14f = m44f.row( i ); |
提取列 | m41f = m44f.col( j ); |
提取对角 | m41f = m44f.diag(); |
转置 | m44f = m44f.t(); |
逆 | m44f = m44f.inv( method );//默认方法为 cv::DECOMP_LU |
解线性系统x1 + x2 + x3 = 6x1 + 0 + x3 = 42x1+ x2 + x3 + 7Ax = b | Matx33f A(1,1,1,1,0,1,2,1,1); cout << “A= \n” << A << endl; Matx31f b(6,4,7); cout << “b= \n” << b << endl; Matx31f x = A.solve(b); cout << “x= \n” << x << endl; |
每个元素的乘法 | m1.mul(m2); |
Vec 类(固定尺寸)
-
Vec类是Matx类更为简单的形式,就是Matx类的列为1。
-
形如:cv::Vec{2,3,4,6}{b,s,w,i,f,d}
操作 | 例子 |
---|---|
默认构造 | Vec2s v2s; Vec6f v6f; |
拷贝构造 | Vec3f u3f( v3f ); |
赋值构造 | Vec2f v2f(x0, x1); Vec6d v6d(x0,x1,x2,x3,x4,x5) |
访问成员 | v4f[ i ]; v3w( j ); []和()都可以工作 |
叉乘 | v3f.cross( u3f ); |
complex number classes
2. 帮助类型(helper objects)
3. 大型数组类型(large array types)
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年03月29日 12时57分50秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Head First设计模式——中介者模式和备忘录模式
2019-03-06
MongoDB版本及存储引擎区别
2019-03-06
shell echo单行和多行文字定向写入到文件中
2019-03-06
解析树状数组
2019-03-06
AtCoder Beginner Contest 100 题解
2019-03-06
【数据结构】可持久化线段树初步
2019-03-06
克拉默法则&矩阵分块:线性代数学习笔记2
2019-03-06
后缀树
2019-03-06
Java高性能编程之CAS与ABA及解决方法
2019-03-06
从BIO到Netty的演变
2019-03-06
《算法导论》第二章笔记
2019-03-06
HTML `capture` 属性
2019-03-06
CSS盒子模型
2019-03-06
HTML节点操作
2019-03-06
浏览器页面呈现过程
2019-03-06
HTML5新特性
2019-03-06
async/await剖析
2019-03-06
cmp命令
2019-03-06
一次编辑
2019-03-06
od命令
2019-03-06