Opencv-C++笔记 (3) : opencv的库介绍以及和C++对接转换

news/2025/2/23 0:23:31/

文章目录

  • 一、Opencv库的介绍
    • calib3d
    • contrib
    • core
    • imgproc
    • features2d
    • flann
    • highgui
    • legacy
    • ml
    • nonfree
    • objdetect
    • ocl
    • photo
    • stitching
    • superres
    • ts
    • video
    • Videostab
  • 二、C++和MAT 转换方式
    • 2.1、一维Vector
    • 2.2、二维vector
    • 2.3 数组
    • 2.4、类型转换 ——一维转 数组
    • 2.5、类型转换 -------- 一维MAT转数组
    • 2.6、类型转换 -------- 二维Vector转Mat
    • 2.7、类型转换 -------- 二维Mat转Vector

一、Opencv库的介绍

在这里插入图片描述
其解释如下:

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

该模块包括运动估计,背景分离,对象跟踪等视频处理相关内容

Videostab

[Videostab]: Video stabilization,视频稳定相关的组件

二、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 copycv::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;}
}

http://www.ppmy.cn/news/403847.html

相关文章

黑苹果N卡显卡驱动,10.13.6

最新驱动下载地址&#xff1a; Drivers - MacVidCards Europe Nvidia Web Driver - 387.10.10.10.40.140 10.13.6 Nvidia Web Driver - 387.10.10.10.40.140 --> build 17G14042 (thanks to lukazm) New! Nvidia Web Driver - 387.10.10.10.40.139 --> build 17G14033 …

练习1:线性回归

练习1&#xff1a;线性回归 介绍 在本练习中&#xff0c;您将 实现线性回归并了解其在数据上的工作原理。 在开始练习前&#xff0c;需要下载如下的文件进行数据上传&#xff1a; ex1data1.txt -单变量的线性回归数据集ex1data2.txt -多变量的线性回归数据集 在整个练习中&…

政企市场,「观望」AI大模型

数据安全等“刚需”下&#xff0c;私有化成为政企市场的准入门槛&#xff0c;然而私有化下&#xff0c;行业模型局限性尚未可知&#xff0c;加之信创化等因素&#xff0c;厂商仍需取长补短&#xff0c;为政企客户提供全方位的解决方案。 作者|斗斗 编辑|皮爷 出品|产业家 政…

三维点云机器学习检测定位圆心,三维圆检测,拟合轴线(基于open3d和python)

0.任务描述 背景&#xff1a;从端面拍摄大型圆筒工件&#xff0c;该工件周向尺寸大于相机视野&#xff0c;只能拍摄到1/3左右的圆周&#xff0c;且无法保证相机与端面垂直拍摄 任务&#xff1a;需要拟合圆周与轴线位置 难点&#xff1a;三维圆拟合与检测都很复杂&#xff0c…

2306d的多维关联数组键关系

原文 我发现可在D的多维aa中,检查键关系. byte zKey someval; byte[byte][byte][byte] cubelist; foreach(byte xK, yzcubelist; cubelist) {foreach(byte yK, zcubelist; yzcubelist) {foreach(byte zK, val; zcubelist) {用此式: if(zKey in cubelist[xK][yK])是否可检查x…

CAN 报文字节排列顺序(Intel、Motorola_LSB、Motorola_MSB)

学习自记&#xff1a; 在定义CAN通信矩阵或制作dbc时&#xff0c;我们需要知道报文的字节排列顺序。字节的排列顺序有2种&#xff0c;一种是Intel的排列顺序&#xff0c;另一种是Motorola的排列顺序&#xff0c;就跟大小端字节排序是一样的。下面笔者将简单介绍这2种字节排序的…

POJ Matches Game

目录 1.题目 2.中文翻译 3.思路解析 3.1 题目来源 3.2 异或操作 4.代码&#xff08;python&#xff09; 1.题目 Matches Game Time Limit: 1000MSMemory Limit: 65536KTotal Submissions: 14934Accepted: 8570 Description Here is a simple game. In this game, there a…

【Linux】文件描述符与重定向操作

系列文章 收录于【Linux】文件系统 专栏 对于Linux下文件的写入与读取&#xff0c;以及文件原理还有疑惑的可以看看上一篇文章浅谈文件原理与操作。 目录 系列文章 再谈文件描述符 ​编辑 IO函数的本质 一切皆文件 文件重定向 原理 系统接口 再谈文件描述符 &#x…