OpenCV概述
什么是OpenCV
OpenCV是一个开源的计算机视觉库可以从http://opencv.org 获取。
OpenCV怎么用
什么是计算机视觉
计算机视觉旧这种技术可以将静止图像或视频数据转换为一种决策或新的表示。
OpenCV的起源
OpenCV缘起于英特尔。
OpenCV的结构
OpenCV是由层级结构组织的
处于最上层的是OpenCV和操作系统的交互。接下来是语言绑定和示例应用程序。再下一层是opencv_contrib模块所包含的OpenCV 由其他开发人员所贡献的代码,其包含大多数高层级的函数功能。这就是OpenCV 的核心。底层是基于硬件加速层 (HAL) 的各种硬件优化。
使用IPP加速OpenCV
如果在英特尔的处理器上使用, OpenCV就会自动使用 种免费的英特尔集成性能原语库(IPP) 的子集, IPP 8.x(IPPICV)o IPPICV可以在编译阶段链接到JOpenCV ,这样一来,会替代相应的低级优化的 语言代码(在cmake 中设置WITH-IPP=ON/OFF开启或者关闭这一功能,默认情况为开启)。使用IPP获得的速度提升非常可观,下图显示了使用IPP之后得到的加速效果。
OpenCV Intel Haswell处理器上使用 IPPICV时的加速效果
下载和安装OpenCV
在OpenCV官方网站 ([http: // opencv. org](http: // opencv. org)) 可以下载最新的且完整的源码以及大部分的release 版本源码。下载链接可以通过下载页面 (http://opencv.org/downloads .html)
OpenCV主要模块
模块 | 说明 |
---|---|
Core | 包含OpenCV库的基础结构以及基础操作 |
Improc | 图像处理模块。包含基本的图像转换、滤波以及类似的卷积操作 |
Highgui | 用来显示图像,包含简单的用户交互函数。是一个清凉的Windows UI工具包 |
Video | 包含读写视频流的函数 |
Calib3d | 包括单目、双目、多个相机校准的算法实现 |
Feature2d | 用于检测、描述以及匹配特征点的算法 |
Objectdetect | 用于目标检测。如人脸或行人的检测算法,也可以训练检测器用于检测其他物体 |
ML | 机器学习模块。包含大量的机器学习算法实现,并且这些算法能和OpenCV的数据类型进行转换交互 |
Flann | 快速近邻库。一般不会直接使用,其他模块的函数会使用到,如在数据集中进行最邻近搜索时调用 |
GPU | 主要是函数在CUDA GPU上的优化实现 |
Photo | 计算摄影学的一些函数工具 |
Stitching | 图像拼接流程实现 |
Nonfree | 受专利保护或使用限制的算法 |
Contrib | 还没有被集成进OPenCV的功能 |
Legacy | 一些老的尚未被取消的东西。在OpenCV3.0中被取消 |
Ocl | 实现了开放并行编程的Khronos OpenCL标准,可以运行在除了Nividia GPU设备上外,可以在任何GPU或者搭载Khronos的并行设备上运行 |
头文件
OpenCV主要模块头文件及说明:
头文件包含路径 | 说明 |
---|---|
#include lopencv2/core/core_c.h" | 旧式C风格的结构以及运算 |
#include “opencv2/core/core.hpp” | 新式C++风格的结构以及数学运算 |
#include “0penCv2/flann/mini ann.hpp” | 最邻近搜索匹配函数 |
#include “opencv2/imgproc/imgproc_c.h” | 旧式C风格的图像处理函数 |
#include “0penCV2/imgproc/imgproc.hpp” | 新式C++风格图像处理函数 |
#include “0penCV2/video/photo.hpp” | 操作和恢复照片相关算法 |
#include “0penCv2/video/video.hpp” | 视觉追踪以及背景分割 |
#include “opencv2/features2d/features2d.hpp” | 二维特征跟踪支持 |
#include “0penCV2/objdetect/objdetect.hpp” | 级联人脸分类器、latent SVM分类器、Hog特征和平面片检测器 |
#include “opencv2/calib3d/calib3d.hpp” | 标定校准及双目视觉相关 |
#include “opencv2/ml/ml.hpp” | 机器学习、聚类及模式识别相关 |
#include “opencv2/highgui/highgui_c.h” | 旧式C风格的显示、滑动条、鼠标操作及输入输出相关 |
#include “opencv2/highgui/highgui.hpp” | 新式C++风格的显示、滑动条、鼠标操作及输入输出相关 |
#include “opencv2/contrib/contrib.hpp” | 用户贡献的代码:皮肤检测、模糊Mean-Shift追踪、spin image算法及自相似特征等 |