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

news2024/10/7 8:20:24

文章目录

  • 一、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 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;
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/650358.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

抖音同城榜相关介绍来啦,这篇文不若与众带你去详细了解它

一、抖音同城榜是什么&#xff1f; 抖音同城榜是抖音平台上的一个功能&#xff0c;它可以根据用户所在的地理位置&#xff0c;推荐附近热门的视频和达人。用户可以通过同城榜来了解当地的热门话题、美食、景点等信息&#xff0c;也可以通过同城榜认识志同道合的朋友和达人&…

DTD怎样进行元素类型定义?【语法格式】

Bootstrap常用组件包括按钮、导航、菜单和表单等。使用Bootstrap不需要编写复杂的样式代码&#xff0c;只需要使用Bootstrap组件就可以实现复杂的页面架构。下面将对Boolstrap按钮组件进行详细讲解。 Bootstrap提供了多种样式的按钮&#xff0c;每个样式的按钮都有自己的语义用…

动态规划:最长公共子序列

动态规划&#xff1a;最长公共子序列 前言一、动态规划 前言 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在…

练习1:线性回归

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

【IMX6ULL驱动开发学习】09.Linux驱动之GPIO中断(附SR501人体红外感应驱动代码)

Linux驱动的GPIO中断编程主要有以下几个步骤&#xff1a; 1、 通过GPIO号获取软件中断号 (中断编程不需要设置GPIO输入输出&#xff0c;当然申请GPIO&#xff0c;设置输入也没问题) int gpio_to_irq(unsigned int gpio)参数含义gpioGPIO引脚编号 2、 注册中断处理函数&#…

k8s中docker0默认ip修改

原因&#xff1a; 由于ip冲突&#xff0c;必须要修改docker0的默认ip 过程&#xff1a; &#xff08;1&#xff09;修改文件 /etc/docker/daemon.json 添加内容 “bip”: “ip/netmask” [ 切勿与宿主机同网段 ] &#xff08;2&#xff09; &#xff08;3&#xff09;重启docke…

视觉SLAM十四讲——ch9实践(后端1)

视觉SLAM十四讲——ch9的实践操作及避坑 0.实践前小知识介绍0.1 数据集的使用 1. 实践操作前的准备工作2. 实践过程2.1 Ceres BA2.2 g2o求解BA 3. 遇到的问题及解决办法3.1 查看.ply文件时报警告 0.实践前小知识介绍 0.1 数据集的使用 Ceres BA使用的是BAL数据集。在本例中&a…

为什么说2023年最难招聘的岗位是高性能计算工程师?

随着毕业季的临近&#xff0c;高校毕业生将进入就业关键阶段。据统计&#xff0c;2023届全国高校毕业生预计达到1158万人&#xff0c;同比增加82万人&#xff0c;再创新高。尽管有千万的大学毕业生&#xff0c;但是企业反馈依然很难招聘到合适的高性能计算工程师。 这主要归因于…

看到就赚到的5款小众软件

今天推荐5款十分小众的软件&#xff0c;知道的人不多&#xff0c;但是每个都是非常非常好用的&#xff0c;有兴趣的小伙伴可以自行搜索下载。 图文识别——PandaOCR PandaOCR是一款用于识别和转换图片中的文字的工具。它可以让你对任何格式的图片进行文字识别&#xff0c;并输…

STM32速成笔记—按键检测

如果需要本文程序工程&#xff0c;请评论区留邮箱或者私信。 文章目录 一、按键检测原理二、硬件连接三、程序设计3.1 初始化GPIO3.2 按键扫描函数 四、按键控制LED4.1 初始化LED和KEY的GPIO4.2 编写按键扫描函数4.2 编写LED控制函数4.3 编写按键服务函数 五、拓展5.1 一个按键…

如何使用二维码实现配电箱巡检

施工工地的外部环境条件恶劣,加之工地上机动车辆的运行和机械设备的应用&#xff0c;均易导致电气故障的发生。现场配电箱缺乏专业技术人员的管理,易造成触电伤害、火灾等事故。现场纸质巡检存在以下问题&#xff1a; 1、信息查询不便:配电箱信息、负责人&#xff0c;历史巡检维…

Flowable服务组件-扩展组件

Flowable服务组件-扩展组件 扩展组件 文章目录 Flowable服务组件-扩展组件前言Flowable给我们提供了非常丰富的组件&#xff0c;但是在实际场景中&#xff0c;我们有需要企业个性化的组件&#xff0c;如何扩展自己的组件至关重要 一、扩展微服务回调组件二、程序步骤1.定义我们…

618父亲节,感恩的祝福送给父亲!

父亲节&#xff08;Fathers Day&#xff09;&#xff0c;是感恩父亲的节日。Fathers day, is a day of thanksgiving for fathers. 第一个提出父亲节理念的人是1906年的多德夫人。她想用一个特殊的日子来纪念她的父亲&#xff0c;她的妈妈多年前就去世了。起初&#xff0c;多德…

1.4 场效应管

1.什么是场效应管&#xff1f; 场效应管&#xff08;Field-Effect Transistor&#xff0c;简称FET&#xff09;是一种基于电场效应调控电流的三端器件。它是一种用于电子电路中的重要元件&#xff0c;常用于放大信号、开关电路和模拟电路等应用。 场效应管主要由一个导电的沟…

git 的详细介绍使用

点击下载&#xff1a;Git下载地址 下载完成后在本地文件夹空白位置右键能看到即为安装成功 git简介&#xff1a;git是一个版本控制系统&#xff0c;见下方图详解 快速查看git的全局配置项 git config --list --global 查看指定的全局配置项 git config user.name git conf…

【Git删除大文件失败,提示WARNING: Ref ‘refs/heads/master‘ is unchanged的解决思路】

1. 问题描述 最近使用Gitee一直在独立开发某个项目&#xff0c;某次因为某个测试文件比较大&#xff0c;超过了100MB&#xff0c;gitee无法接受&#xff0c;上传失败。但是当时我没有发现上传失败&#xff0c;就没有处理&#xff0c;等到今天发现的时候&#xff0c;已经提交过…

Low-Light Image Enhancement with Wavelet-based Diffusion Models

Abstract 扩散模型在图像恢复任务中取得了很好的效果&#xff0c;但存在时间长、计算资源消耗大、恢复不稳定等问题。为了解决这些问题&#xff0c;我们提出了一种鲁棒和高效的基于扩散的微光图像增强方法&#xff0c;称为DiffLL。具体来说&#xff0c;我们提出了一个基于小波…

Vulnhub靶机:ME AND MY GIRLFRIEND_ 1

目录 介绍信息收集主机发现主机信息探测 网站探测SSH爆破 & 提权 介绍 系列&#xff1a;Me and My Girlfriend&#xff08;此系列共1台&#xff09; 发布日期&#xff1a;2019 年 12 月 13 日 难度&#xff1a;初级 运行环境&#xff1a;VMware 目标&#xff1a;取得 root…

Linux——MySQL数据库部署及自建数据库mysql-yum仓库

&#x1f618;作者简介&#xff1a;正在努力的99年打工人。 &#x1f44a;宣言&#xff1a;人生就是B&#xff08;birth&#xff09;和D&#xff08;death&#xff09;之间的C&#xff08;choise&#xff09;&#xff0c;做好每一个选择。 &#x1f64f;创作不易&#xff0c;动…

如何有效提升英文口语水平?这 15 个方法值得学习!

要提升英文口语水平&#xff0c;除了多说多练&#xff0c;还有很多方法可以尝试。下面&#xff0c;小编为大家整理了15个有效的方法&#xff0c;让你说英语更自信流利&#xff01; Record yourself speaking English and listen back to your pronunciation and intonation, i…