Opencv3编程入门第四章--Opencv 数据结构与基本绘图
2020-01-15 05:11
141 查看
Opencv 数据结构与基本绘图
基础图像容器 Mat
Mat优点及注意事项
- Mat优点
– 不用手动开辟空间
– 不需要手动释放空间
要点1. Mat = 矩阵头+一个指向存储所有像素值的矩阵
要点2. 拷贝构造函数只复制信息头和矩阵指针,而不复制矩阵,即赋值运算符和拷贝构造函数(构造函数)只复制信息头,例【Mat B(A) or C = A】
要点3. 使用函数clone()或者copyTo()来复制一个图像的矩阵【深拷贝】
像素值的存储方式
- RGB【显示屏】
- HSV/HLS 【对光照不敏感】
- YCrCb 【JPEG】
- CIE Lab 【用来度量2个颜色的距离】
显式创建Mat对象方法
- 使用Mat()构造函数
Mat M(2,2,CV_8UC3, Scalar(0,0,0255)) 输出: [ 0, 0, 255, 0, 0, 255; 0, 0, 255, 0, 0, 255]
tips: CV_[位数][带符号与否][类型前缀]C[通道数]
- 在C/C++中通过构造函数进行初始化
int sz[3] = {2,2,2}; Mat L(3,sz,CV_8UC,Scalar::all(0));
- 利用Create()函数
M.create(4,4,CV_8UC(2)); cout<<"M="<<endl<<" "<< M << endl << endl;
该方法不能为矩阵设置初值,知识在盖面尺寸是重新为矩阵数据开辟内存而已。
- 对小矩阵使用逗号分隔式初始化函数
Mat C = (Mat_<double>(3,3) << 0,-1,0,-1,5,-1,0,-1,0); cout << "C=" << endl << " " << endl << endl
- 为已存在的对象创建信息头
Mat RowClone = C.row(1).clone(); count << "RowClone = " << endl << "" << RowClone << endl << endl;
Opencv格式化输出方法
int main() { Mat M(10, 3, CV_8UC3); randu(M, Scalar::all(0), Scalar::all(255));//随机 cout << "r(Opencv默认风格)=" << M << ";" << endl << endl; waitKey(0); return 0; } 输出: r(Opencv默认风格)=[ 91, 2, 79, 179, 52, 205, 236, 8, 181; 239, 26, 248, 207, 218, 45, 183, 158, 101; 102, 18, 118, 68, 210, 139, 198, 207, 211; 181, 162, 197, 191, 196, 40, 7, 243, 230; 45, 6, 48, 173, 242, 125, 175, 90, 63; 90, 22, 112, 221, 167, 224, 113, 208, 123; 214, 35, 229, 6, 143, 138, 98, 81, 118; 187, 167, 140, 218, 178, 23, 43, 133, 154; 150, 76, 101, 8, 38, 238, 84, 47, 7; 117, 246, 163, 237, 69, 129, 60, 101, 41];
输出其他常用数据结构
- 定义和输出二维点
Point2f p(6,2); cout << p << ";\n" << endl; // [6,2]
- 定义和输出三维点
Point3f p3f(8,2,0); cout << p3f << ";\n" << endl;
- 定义和输出基于Mat的std::vector
vector<float> v; v.push_back(3); v.push_back(4); cout <<Mat(v) << ";\n" << endl;
4.定义和输出std::vector点
vector<Point2f> points(20); for (size_t i = 0; i < points.size(); ++i) points[i] = Point2f((float)(i*5),(float)(i%7)); cout <<points ;
常用数据结构和函数
- 点的表示
Point point point.x = 10; point.y = 8;
- 颜色的表示:Scalar类
Scalar(a,b,c) - 尺寸的表示:Size类
Size(5,5); - Rect类
contains(Point)判断点是否在矩阵内;
inside(Rect)判断矩阵是否在该矩阵内;
tl()返回左上角点坐标;
br()返回右下角坐标; - 颜色空间转换:cvtColor()函数
cvtColor(src,dst,CV_RGB2GRAY); //将输入图像的RGB颜色通道转为GRAY,然后将GRAY形式的图像传给dst;
6.基本图形的绘制
【ToDo】待整理
基本图形的绘制.
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- OpenCV3——数据结构与基本绘图
- OpenCV3学习笔记-数据结构和基本绘图
- OpenCV笔记(一)——数据结构与基本绘图
- OpenCV 学习记录3 数据结构和基本绘图
- OpenCV3 第四章学习笔记-------Mat用法、多种格式化输出方法、常用数据结果、基本绘图操作
- opencv学习笔记——数据结构与基本绘图
- 三.数据结构与基本绘图(2.常用图形数据结构)
- 三.数据结构与基本绘图(3.颜色空间转换函数)
- OpenCV学习(3)——命名风格和基本数据结构
- OpenCV系统学习:一、OpenCV结构、基本数据类型
- Opencv基本数据结构
- OpenCV之Point、Scalar数据类及基本绘图
- OpenCV的概况和基本数据结构
- opencv 基本数据结构
- [翻译]C#数据结构与算法 – 第四章 基本查找算法
- Study notes for OpenCV——第七节 OpenCV基本数据结构
- Opencv基本绘图 Point 和 Scalar 这两个结构:
- 【openCV入门之三】数据结构和绘图函数
- opencv 基本数据结构
- opencv学习笔记[9]:Opencv的基本数据类型和矩阵结构