OpenCV入门(四)
·
第0章 前言
参考书籍:学习OpenCV3 中文版(Learning OpenCV 3:computer vision with the OpenCV Library)
OpenCV适用于图像处理、模式识别、三维重建、物体跟踪、机器学习和线性代数
先修课程:C++编程、线性代数、概率论
使用方法:本书提供了三种阅读方法,由于工具书的定位,作者建议,第一,可以“抓取重点”,先阅读1~5章,之后只阅读需要的章节;第二,可以“精读”,坚持每周阅读两章;第三,“速成”,快速阅读。都提到了以项目为导向。
目录
第1章 概述(略)
第2章 OpenCV初探
第3章 了解OpenCV的数据类型
第4章 图像和大型数组类型
第5章 矩阵操作
第6章 绘图和注释
第7章 OpenCV中的函数子
第8章 图像、视频与数据文件
第9章 跨平台和Windows系统
第10章 滤波与卷积
第11章 常见的图像变换
第12章 图像分析
第13章 直方图和模板
第14章 轮廓
第15章 背景提取
第16章 关键点和描述子
第17章 跟踪
第18章 相机模型与标定
第19章 投影与三维视觉
第20章 机器学习基础(略)
第21章 StatModel:OpenCV中的基准学习模型(略)
第22章 目标检测(略)
第23章 OpenCV的未来
英文书籍与国内书籍有很大的不同。
第4章 图像和大型数组类型
OpenCV的核心 Mat
创建一个Mat
Mat m(3, 10, CV_32FC3, Scalar(1.0f, 0.0f, 1.f));
//3行,10列,3通道,32位浮点数,使用数组进行初始化
cout << m << endl;

独立获取数组元素
使用模板函数at()进行直接访问,先将at<>()转化到矩阵所包含的数据类型,再设置行和列
cout << "Element(2,2) is " << m.at<float>(2, 2) << endl;
//Element(2,2) is 1
但是m矩阵是3通道的,得到的结果不符合实际。
cout << "Element(2,2) is " << m.at<Vec3f>(2, 2) << endl;
//Element(2,2) is [1, 0, 1]
这样就对了
稀疏矩阵SpareMat
四种访问矩阵元素的机制:
cv::SparseMat::ptr()
cv::SparseMat::ref()
cv::SparseMat::value()
cv::SparseMat::find()
int size[] = { 10,10 };
SparseMat sm(2, size, CV_32F);
for (int i = 0; i < 10; i++)
{
int idx[2];
idx[0] = size[0] * rand();
idx[1] = size[1] * rand();
sm.ref<float>(idx) += 1.0f;
}
SparseMatConstIterator_<float> it = sm.begin<float>();
SparseMatConstIterator_<float> it_end = sm.end<float>();
for (; it != it_end; ++it)
{
const SparseMat::Node* node = it.node();
cout << node->idx[0] << " " << node->idx[1] << " " << *it << endl;
}
return 0;
对稀疏矩阵不太理解
PCA(Principal Component Analysis) 是一种常见的数据分析方式,常用于高维数据的降维,可用于提取数据的主要特征分量。
更多推荐



所有评论(0)