OpenCV 架构学习

来源:互联网 发布:app推广 aso优化方案 编辑:程序博客网 时间:2024/05/21 03:20

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)                //CvNormalBayesClassifierK-近邻分类器(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)  //CvForestERTreeboost分类器(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:不带参构造FileStoragefs.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和TMat T=Mat_<double>::zeros(3,1);fs<<"R"<<R;//向Mat中写入数据fs<<"T"<<T;fs["R"]=R;//从Mat中读取数据fs["T"]=T;3、释放FileStoragefs.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地址}
原创粉丝点击