一、Opencv库的介绍
calib3d 主要包含相机标定,立体视觉的功能:物体姿势估计,三维重建,摄像头标定
core,包含库的基本结构和操作,比如数据结构,绘图函数,数组操作等函数
dnn,深度学习模块,包含构建网络,加载序列化的模型,但是不支持训练,只能推理
features2d,处理图像特征点,特征检测,描述匹配之类的
flann,这个模块是高维的近似近邻快速搜索算法库 主要包含快速近似近邻搜索与聚类等。
gapi,加速图像处理的框架,没有特定的算法
highgui,创建操作显示图像的窗口,处理鼠标事件和键盘命令,提供交互式可视化的界面
imgcodecs 图片的保存和读取
imgproc,图像处理模型,滤波,几何变换,直方图,特征检测目标检测等。
ml,机器学习模块,统计分类,回归,聚类等
objdetect,目标检测慕课,Haar特征等
photo,摄影模型用来图片修复,去噪
stitching,图像拼接,包含特征点的寻找和匹配,估计选择,自动校准,接缝等(啊这)
video ,视频分析模型,用于运动估计,背景分离,对象跟踪等
videoio ,视频输入,输出模块。
其解释如下:
calib3d
其实就是就是Calibration(校准)加3D这两个词的组合缩写。这个模块主要是相机校准和三维重建相关的内容。基本的多视角几何算法,单个立体摄像头标定,物体姿态估计,立体相似性算法,3D信息的重建等等。
contrib
[contrib]:也就是Contributed/Experimental Stuf的缩写,
该模块包含了一些最近添加的不太稳定的可选功能,不用去多管。2.4.10里的这个模块有新型人脸识别, 立体匹配 ,人工视网膜模型等技术。
core
OpenCV基本数据结构 动态数据结构 绘图函数 数组操作相关函数 辅助功能与系统函数和宏 与OpenGL的互操作
imgproc
线性和非线性的图像滤波
图像的几何变换
其它(Miscellaneous)
图像转换
直方图相关
结构分析和形状描述
运动分析和对象跟踪
特征检测
目标检测等内容
features2d
[features2d]: 也就是Features2D, 2D功能框架 ,包含如下内容
特征检测和描述
特征检测器(Feature Detectors)通用接口
描述符提取器(Descriptor Extractors)通用接口
描述符匹配器(Descriptor Matchers)通用接口
通用描述符(Generic Descriptor)匹配器通用接口
关键点绘制函数和匹配功能绘制函数
flann
[flann]: Fast Library for Approximate Nearest
Neighbors,高维的近似近邻快速搜索算法库, 包含两个部分:快速近似最近邻搜索和聚类[gpu]: 运用GPU加速的计算机视觉模块
highgui
[highgui]: 也就是high gui,高层GUI图形用户界面,包含媒体的I / O输入输出,
视频捕捉、图像和视频的编码解码、图形交互界面的接口等内容
legacy
运动分析
期望最大化
直方图
平面细分(C API)
特征检测和描述(Feature Detection and Description)
描述符提取器(Descriptor Extractors)的通用接口
通用描述符(Generic Descriptor Matchers)的常用接口
匹配器
ml
[ml]: Machine Learning,机器学习模块, 基本上是统计模型和分类算法,包含如下内容
统计模型 (Statistical Models)
一般贝叶斯分类器 (Normal Bayes Classifier)
K-近邻 (K-NearestNeighbors)
支持向量机 (Support Vector Machines)
决策树 (Decision Trees)
提升(Boosting)
梯度提高树(Gradient Boosted Trees)
随机树 (Random Trees)
超随机树 (Extremely randomized trees)
期望最大化 (Expectation Maximization)
神经网络 (Neural Networks)
MLData
nonfree
[nonfree]: 也就是一些具有专利的算法模块 ,包含特征检测和GPU相关的内容。最好不要商用,可能会被告哦。
objdetect
[objdetect]: 目标检测模块,包含Cascade Classification(级联分类)和Latent SVM这两个部分。
ocl
[ocl]: 即OpenCL-accelerated Computer Vision,运用OpenCL加速的计算机视觉组件模块
photo
[photo]: 也就是Computational Photography,包含图像修复和图像去噪两部分
stitching
[stitching]: images stitching,图像拼接模块,包含如下部分:
拼接流水线
特点寻找和匹配图像
估计旋转
自动校准
图片歪斜
接缝估测
曝光补偿
图片混合
superres
ts
video
该模块包括运动估计,背景分离,对象跟踪等视频处理相关内容文章来源:https://www.toymoban.com/news/detail-486228.html
Videostab
[Videostab]: Video stabilization,视频稳定相关的组件文章来源地址https://www.toymoban.com/news/detail-486228.html
二、C++和MAT 转换方式
2.1、一维Vector
//定义一维vector
vector<float> channel_data;
//向vector中添加元素,用push_back
for (int j = 0; j < numMic; j++){
channel_data.push_back(*m_dataMic);
}
//求vector长度
int Len_data = vector.size();
//索引数据
channel_data[i]
//求vector中的最大值及位置
auto maxPosition = max_element(channel_data.begin(), channel_data.end());
cout << *maxPosition << " at the postion of " << maxPosition - channel_data.begin
2.2、二维vector
vector<vector<float>> power; //定义二维vector
vector<float> add_power; //定义一维vector
//std::vector<std::vector<float>> power; //定义二维vector
//std::vector<float> add_power; //定义一维vector
for (int i=0; i<Len1; i++)
{
//给1维vector添加元素
for (int j=0; j<Len2; j++)
{
add_power.push_back(amplite_planes1[j]);
}
power.push_back(add_power) //给2维vector添加元素
}
int n = power.size(); //Len1的长度
int m = power[0].size(); //Len2的长度
//求2维vector中的最大值及位置
float max_power = 0.0;
int pos[2];
for (int p = 0; p < power.size(); p++)//求2维Vector的最大值
{
auto maxPosition = max_element(power[p].begin(), power[p].end());
if (max_power <= *maxPosition){
max_power = *maxPosition;
pos[0] = p;//第几行
pos[1] = maxPosition-power[p].begin();//第几列
}
}
2.3 数组
//一维数据维度计算
int num=0;
num=sizeof(Array)/sizeof(Array[0]);
//二维数组维度计算
int Array[5][5];
int numberOfRow,numberOfCol,len;
numberOfCol=sizeof(Array[0])/sizeof(int);
len=sizeof(Array)/sizeof(int);
numberOfRow=len/numberOfCol;
2.4、类型转换 ——一维转 数组
vector<float> channel_data3; //定义一维vector;假定channel_data3已添加了元素
float *singleChannel_data = new float[Len];
for (int i = 0; i < Len; i++)
{
singleChannel_data[i] = channel_data3[i];
}
2.5、类型转换 -------- 一维MAT转数组
//转8位一维数组
uchar *array = new unsigned char[mat.rows*mat.cols];
if (mat.isContinuous())
array = mat.data;
2.6、类型转换 -------- 二维Vector转Mat
std::vector<std::vector<float>> power; //定义二维vector
// 二维Vector转换为Mat类型的mat_power
// Create a new, _empty_ cv::Mat with the row size of OrigSamples
cv::Mat mat_power(0, power[0].size(), cv::DataType<float>::type);
for (unsigned int i = 0; i < power.size(); ++i)
{
// Make a temporary cv::Mat row and add to NewSamples _without_ data copy
cv::Mat Sample(1, power[0].size(), cv::DataType<float>::type, power[i].data());
mat_power.push_back(Sample);
}
//查看二维Mat元素
power.ptr<float>(0),32 //查看第0行0-31列的32个元素
2.7、类型转换 -------- 二维Mat转Vector
//初始化二维vector维度
vector<vector<float>> R_vec;
R_vec.resize(num_row);//行
for (int c = 0; c < R_vec.size(); c++){
R_vec[c].resize(num_col);//列
}
//R为2维Mat
for (int x = 0; x < R.rows; x++) {
for (int y = 0; y < R.cols; y++) {
//R_vec[x][y] = R.at<float>(x, y);
R_vec[x][y] = R.ptr<float>(x)[y];
//std::cout << boxPts.at<float>(x, y) << std::endl;
}
}
到了这里,关于Opencv-C++笔记 (3) : opencv的库介绍以及和C++对接转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!