OpenCV 架构学习

OpenCV 架构学习

OpenCV
跨平台c/c++计算机视觉库, 可应用于人机互动、物体识别、图像分割、人脸识别、动作识别、运动跟踪、机器人、运动分析、机器视觉等领域

OpenCV的基本架构:
core
核心功能:
OpenCV基本数据结构
动态数据结构
绘图函数
数组操作相关函数
辅助功能与系统函数和宏
与OpenGL的互操作
imgproc
Image和Process,图像处理模块
线性和非线性的图像滤波
图像的几何变换
直方图相关
结构分析和形状描述
运动分析和对象跟踪
特征检测
目标检测等内容
features2D
2D功能架构,特征检测、描述符提取、匹配、通用描述符
highgui
GUI图形用户界面, 包含:媒体的I/O输入输出、视频捕捉、图像和视频的编码解码、图形交互界面的接口等
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)

Ml.hpp

#define CV_TYPE_NAME_ML_SVM         "opencv-ml-svm"                     //支持向量机  
#define CV_TYPE_NAME_ML_KNN         "opencv-ml-knn"                     //K-近邻  
#define CV_TYPE_NAME_ML_NBAYES      "opencv-ml-bayesian"                //正态贝叶斯分类器,并非朴素贝叶斯分类器
#define CV_TYPE_NAME_ML_EM          "opencv-ml-em"                      //期望最大化  
#define CV_TYPE_NAME_ML_BOOSTING    "opencv-ml-boost-tree"              //boost分类树 
#define CV_TYPE_NAME_ML_TREE        "opencv-ml-tree"                    //决策树
#define CV_TYPE_NAME_ML_ANN_MLP     "opencv-ml-ann-mlp"                 //感知器神经网络分类器  
#define CV_TYPE_NAME_ML_CNN         "opencv-ml-cnn"                     //卷积神经网络  
#define CV_TYPE_NAME_ML_RTREES      "opencv-ml-random-trees"                 //随机树 
#define CV_TYPE_NAME_ML_ERTREES     "opencv-ml-extremely-randomized-trees"   //随机森林分类器  
#define CV_TYPE_NAME_ML_GBT         "opencv-ml-gradient-boosting-trees"      //梯度boost分类器

正态贝叶斯分类器(Normal Bayes Classifier)                //CvNormalBayesClassifier
K-近邻分类器(K-Nearest Neighbour Classifier)             //CvKNearest
支持向量机分类器(Support Vector Machines)                //CvSVM
期望最大化EM分类器(Expectation - Maximization)           //EM
决策树分类器(Decision Tree)                              //CvDTree
随机森林分类器(Random Trees (Random Forest) Classifier)  //CvRTrees+CvForestTree: CvStatModel -> CvDTree -> CvForestTree, CvStatModel -> CvRTrees
超随机森林分类器(Extremely randomized trees Classifier)  //CvForestERTree
boost分类器(Boosted tree classifier)                     //CvBoostTree+CvBoost
梯度boost分类器(Gradient Boosted Trees)                  //CvGBTrees。
人工神经网络分类器(Artificial Neural Networks)           //CvANN_MLP

MLData
calib3d
Calibration 3D,相机校准以及三维重建,
包含:基本的多视角几何算法,单个立体摄像头标定,物体姿态估计,立体相似性算法,3D信息的重建等
objdetect
目标检测模块,包含:CascadeClassification(级联分类)和 Latent SVM
stitching
images stitching,图像拼接模块:
拼接流水线
特点寻找和匹配图像
估计旋转
自动校准
图片歪斜
接缝估测
曝光补偿
图片混合
video
视频分析组件,该模块包括运动估计,背景分离,对象跟踪等视频处理相关内容

XML YAML读写:
XML(英文全称eXtensible Markup Language)是一种元标记语言。所谓“元标记”,就是开发者可以根据自身自身需要定义自己的标记.
YAML可读性高,用来表达资料序列的格式, 后缀名.yml和.yaml.
XML和YAML是使用非常广泛的文件格式,可用于存储和还原各式各样的数据结构, 也可以存储和载入任意复杂的数据结构
FileStorage
是OpenCV中XML和YAML文件的存储类,封装了所有相关的信息,
是OpenCV从文件中读取数据或像文件中写数据时必须使用的一个类。

1、创建FileStorage对象
// FileStorage::WRITE,FileStorage::READ两种方式访问
FileStorage fs("F:\\my_matrix.xml",FileStorage::WRITE); //方式1:带参构造函数
FileStorage fs; // 方式2:不带参构造FileStorage
fs.open("F:\\my_matrix.xml",FileStorage::WRITE); 

2、数据的输入输出
文本和数字的输入输出:
写入文件用"<<"运算符,如:
fs<<"a"<<100;//把100放入a中在文件中显示的是 a:100
读操作,使用“>>”运算符,如:
int a1;
fs["a"]>>a1;
a1=(int)fs["a"];//这两个语句表示把文件中的a的值强制类型转换之后赋给变量a1。

OpenCV数据结构的输入输出,和基本的C++形式相同,如:
Mat R=Mat_<uchar>::eye(3,3);  //初始化矩阵R和T
Mat T=Mat_<double>::zeros(3,1);
fs<<"R"<<R;//向Mat中写入数据
fs<<"T"<<T;
fs["R"]=R;//从Mat中读取数据
fs["T"]=T;

3、释放FileStorage
fs.release();   //relesae class object 

Android下OpenCV开发方式:
1、Java语言
(OpenCV库经Java/JNI的封装后,java应用开发就可调用封装后的opencv的java api,
最后经jni调用到本地Opencv库实现相应功能)
2、C/C++语言(JNI)
3、Java和C/C++语言 (JAVA+JNI)

加载OpenCV4Android:
async initialization:
OpenCV提供了一个可在Google Play上下载的App,将OpenCV4Android的Android库项目(libraray project)加入到你Android项目中即可
static initialization:
将相关的本地库(so文件)部署到项目, 如:system.loadLibrary(“opencv_java”);

Java JNI间Mat相互传递:

Java:
public native long getHistMat(long matAddr);
Mat bitmapMat; // Mat就是C++在内存中生成的对象,Java只需传递该对象的地址就行
long histAddr = getHistMat(bitmapMat.getNativeObjAddr());
Mat histMat = new Mat(histAddr);

JNI:
JNIEXPORT long JNICALL Java_xxx_getHistMat(JNIEnv *env, jobject thiz, jlong matAddr){
  Mat img1 =  Mat(*(Mat*)matPtr); //JNI通过matAddr的指针操作,构造新Mat对象
  ...
  cvtColor(img1, img1, CV_BGR2GRAY); 
  Mat *hist = new Mat(img1); 
  return (jlong) hist; //通过强制类型转换后,返回Mat地址
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值