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

这篇具有很好参考价值的文章主要介绍了Opencv-C++笔记 (3) : opencv的库介绍以及和C++对接转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Opencv库的介绍

Opencv-C++笔记 (3) : opencv的库介绍以及和C++对接转换
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

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

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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Opencv-C++笔记 (6) : opencv-图片和视频操作

    filename:需要读取图像的文件名称,包含图像地址、名称和图像文件扩展名 flags:读取图像形式的标志,如将彩色图像按照灰度图读取,默认参数是按照彩色图像格式读取,可 选参数在表2-3给出。 函数用于读取指定的图像并将其返回给一个Mat类变量,如果图像文件不存在、破

    2024年02月09日
    浏览(26)
  • Opencv-C++笔记 (9) : opencv-多通道分离和合并

    在图像颜色模型中不同的分量存放在不同的通道中,如果我们只需要颜色模型的某一个分量,例如只需要处理RGB图像中的红色通道,可以将红色通道从三通道的数据中分离出来再进行处理,这种方式可以减少数据所占据的内存,加快程序的运行速度。同时,当我们分别处理完

    2024年02月09日
    浏览(30)
  • Opencv-C++笔记 (18) : 轮廓和凸包

    轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法。 所以边缘提取的阈值选定会影响最终轮廓发现结果 轮廓查找步骤: 输入图像转为灰度图像cvtColor 使用Canny进行边缘提取或者threshold阈值操作,得到二值图像 使用findContours寻找轮廓 使用drawContours绘制轮廓 在二值图像

    2024年02月11日
    浏览(21)
  • Opencv-C++笔记 (7) : opencv-文件操作XML和YMAL文件

    除了图像数据之外,有时程序中的尺寸较小的Mat类矩阵、字符串、数组等 数据也需要进行保存,这些数据通常保存成XML文件或者YAML文件。本小节中将介绍如何利用OpenCV 4中的函数将数据保存成XML文件或者YAML文件以及如何读取这两种文件中的数据。 XML是一种元标记语言,所谓

    2024年02月09日
    浏览(53)
  • Opencv-C++笔记 (15) : 像素重映射 与 图像扭曲

    重映射,就是把一幅图像中某位置的像素放置到另一图像指定位置的过程。即: 在重映射过程中,图像的大小也可以同时发生改变。此时像素与像素之间的关系就不是一一对应关系,因此在重映射过程中,可能会涉及到像素值的插值计算。 头文件 quick_opencv.h:声明类与公共

    2024年02月13日
    浏览(29)
  • Opencv-C++笔记 (13) : opencv-图像卷积一(均值、中值、高斯、双边滤波)与 边缘处理

    头文件 quick_opencv.h:声明类与公共函数 主函数调用 src:输入图像 。 dst:输出图像 。 ksize:内核大小 ,一般用 Size(w,h),w 为宽度,h 为深度。 anchor:被平滑的点,表示取 内核中心 ,默认值 Point(-1,-1)。 boderType:推断图像外部像素的某种边界模式。默认值 BORDER_DEFAULT 目的:

    2024年02月16日
    浏览(36)
  • Opencv-C++笔记 (16) : 几何变换 (图像的翻转(镜像),平移,旋转,仿射,透视变换)

    图像旋转是指图像按照某个位置转动一定的角度的过程,旋转中图像仍保持着原始尺寸。图像旋转后图像水平对称轴、垂直对称轴及中心坐标原点都可能会发生变换,因此需要对图像旋转中的坐标进行相应转换。 假设有一个点:P(x,y),它在绕原点 O(0,0) 旋转 β 后,被转换成

    2024年02月14日
    浏览(38)
  • opencv-c++

    1、接口类 类型 说明 InputArray 只读输入数组传递到 OpenCV 函数的代理类 OutputArray 这种类型与 InputArray 非常相似,只是它用于输入/输出和输出函数参数 InputOutputArray 继承了OutputArray,作为输入输出接口,增加了一些功能 InputArrayOfArrays typedef InputArrayInputArrayOfArrays OutputArrayOfArray

    2024年02月08日
    浏览(69)
  • 【OpenCV】OpenCV介绍及C++环境配置

    OpenCV 是一个跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 OpenCV 是用C++语言编写的,同时留有C ++(工程部署用)、Python(深度学习用)、Java和MATLAB(Matlab好多例子都调用的opencv)接口,为了学习(juan)和部署视觉类的应用,记录一

    2024年02月07日
    浏览(29)
  • halcon介绍以及与opencv比较

    Halcon是一种机器视觉开发平台,由MVTec Software GmbH开发和推广。它是一款功能强大、易于使用的机器视觉软件,被广泛应用于工业自动化、机器人视觉、医疗、安全监控等领域。 Halcon不是开源的软件,它是由奥地利MVTec Software GmbH公司开发的商业软件。Halcon是一款功能强大的机

    2024年02月11日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包