OPENCV之头文件分析
opcv

OpenCV是Intel开源计算机视觉库。
它由一系列C 函数和少量C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV 拥有包括300 多个C函数的跨平台的中、高层API。
它不依赖与其它的外部库,尽管也可以使用某些外部库。
OpenCV 对非商业应用和商业应用都是免费(FREE)的。
在VC6.0中利用OpenCV进行开发视觉,首先,需要将OpenCV正确的配置到VC开发环境中。
主要是设置预先编译的头文件的路径与动态链接库的路径。
一在VC编译器下,在Project菜单下选择setting,弹出对话框。
1 设置预编译的头文件选择C/C++【Category】,在下拉菜单中选择Preprocessor,然后在A dditional Include directories 中输入以下几项:C:\Program Files\OpenCV\cv\include (根据本人机器上OpenCV的安装路径进行设置,如在D盘,则写D: ,以下同)C:\Program Files\OpenCV\otherlibs\highguiC:\Program Files\OpenCV\cxcore\include(新版本需要)C:\Program Files\OpenCV\otherlibs\cvcam\include每一条之间用逗号隔开。
其中C:\Program Files\Intel\opencv为OpenC V的安装路径,这是通用的安装路径,建议最好采用这种设置,以方便大家交流;不然,每次都要重新设置路径,比较麻烦。
2 设置链接库在Link按键下的Category下拉菜单中选择Input选项(指定要连接的库文件,放弃连接的库文件hao ),在Additional library path中,输入:C:\Program Files \OpenCV\lib最后在Setting For下拉菜单中依次选择Win32 Debug和Win32 Releas e,分别在Object /library modules 输入:cv.lib highgui .lib cxcore.lib cvcam.lib注意每个库之间用一个空格隔开。
C语言中头文件和cpp文件解析

C语⾔中头⽂件和cpp⽂件解析回到cpp⽂件与头⽂件各写什么内容的话题上:理论上来说cpp⽂件与头⽂件⾥的内容,只要是C语⾔所⽀持的,⽆论写什么都可以的,⽐如你在头⽂件中写函数体实现,任何⼀个cpp⽂件包含此头⽂件就可以将这个函数编译成⽬标⽂件的⼀部分(编译是以cpp⽂件为单位的,如果不在任何cpp⽂件中包含此头⽂件的话,这段代码就形同虚设),你可以在cpp⽂件中进⾏函数声明、变量声明、结构体声明,这也不成问题那为何⼀定要分成头⽂件与cpp⽂件呢?⼜为何⼀般都在头件中进⾏函数、变量声明,宏声明,结构体声明呢?⽽在cpp⽂件中去进⾏变量定义,函数实现呢??原因如下: 1.如果在头⽂件中实现⼀个函数体,那么如果在多个cpp⽂件中引⽤它,⽽且⼜同时编译多个cpp⽂件,将其⽣成的⽬标⽂件连接成⼀个可执⾏⽂件,在每个引⽤此头⽂件的cpp⽂件所⽣成的⽬标⽂件中,都有⼀份这个函数的代码,如果这段函数⼜没有定义成局部函数,那么在连接时,就会发现多个相同的函数,就会报错,函数重复定义。
2.如果在头⽂件中定义全局变量,势必会对此全局变量赋初值,那么在多个引⽤此头⽂件的cpp⽂件中同样存在相同变量名的拷贝,关键是此变量被赋了初值,所以编译器就会将此变量放⼊DATA段,最终在连接阶段,会在DATA段中存在多个相同的变量,它⽆法将这些变量统⼀成⼀个变量,统⼀变量的意思也就是仅为此变量分配⼀个空间,⽽不是多份空间。
但是对于声明⼀个变量,这个变量在头⽂件没有赋初值,编译器就会将之放⼊BSS段,连接器会对BSS段的多个同名变量仅分配⼀个存储空间。
3.如果在cpp⽂件中声明宏、结构体、函数等,那么我要在另⼀个cpp⽂件中引⽤相应的宏、结构体、函数,就必须再做⼀次重复的⼯作(意思是说如果不去#include),如果我改了⼀个cpp⽂件中的⼀个声明,那么⼜忘了改其它cpp⽂件中的声明,这不就出了⼤问题了,程序的逻辑就变成了你不可想象的了,如果把这些公共的东东放在⼀个头⽂件中,想⽤它的cpp⽂件就只需要引⽤⼀个就OK了这样岂不⽅便,要改某个声明的时候,只需要动⼀下头⽂件就⾏了。
OpenCV简介

基本的数据结构
1.图像结构 2.矩阵的与向量结构 3.其他的数据结构 (1)点的表示 (2)长方形维数的表示 (3)有偏移量的长方形表示
中国.中学政治教学网崇尚互联共享
图像结构
Opencv中的所有图像都采用同一个结构 IplImage,该图像结构说明参考后面的 PPT。实际上, IplImage是借鉴于Intel 公司最早发布的IPP图像处理开发包中 的定义;但由于IPP并非开源项目,因 此对于OpenCV基本采用这个较复杂的 图像结构,其版权方面的问题还有待 研究。
中国.中学政治教学网崇尚互联共享
OpenCV基础
1.OpenCV命名规则 2.基本数据结构 3.矩阵的使用与操作 4.图象的使用与操作 5.数据结构与数据操作
中国.中学政治教学网崇尚互联共享
OpenCV命名规则
中国.中学政治教学网崇尚互联共享
学习资源
目前,OpenCV方面的资源已经很多,当然最简单的方法还是在网上搜索, 比如在Google搜索引擎() 中输入”OpenCV”即可进行相关查找,这里给出一些信息作为参考。 (1)参考手册 英文 请打开文件<opencv-root>/docs/index.htm进行查询。 中文 请打开网页/进行查阅。 (2)网络资源 官方网站 网址是/technology/computing/opencv/。 中文官方网站 网址是/。 软件下载 网址是/projects/opencvlibrary/。 (3)书籍 请阅读北京航空航天大学出版社出版的《OpenCV教程》。
1.函数命名规则
通用函数名为 cvActionTargetMod(…) 其中,Action表示核心函数(比如:Set,Create); Target表示目标图像区域(比如:轮廓,多边形); Mod表示可选变种(比如:变量类型)。
OpenCV读写视频文件解析(二)

OpenCV读写视频文件解析(二)OpenCV读写视频文件解析(二)VideoCapture::set设置视频捕获中的属性。
C :bool VideoCapture::set(int propId, double value)Python:cv2.VideoCapture.set(propId, value) → retvalC:int cvSetCaptureProperty(CvCapture* capture, int property_id, double value)Python:cv.SetCaptureProperty(capture, property_id, value) → retvalParameters:•propId–Property identifier. It can be one of the following:o CV_CAP_PROP_POS_MSEC Current position of the video file in milliseconds.o CV_CAP_PROP_POS_FRAMES 0-based index of the frame to be decoded/captured next.o CV_CAP_PROP_POS_AVI_RATIO Relative position of the video file: 0 - start of the film, 1 - end of the film.o CV_CAP_PROP_FRAME_WIDTH Width of the frames in the video stream.o CV_CAP_PROP_FRAME_HEIGHT Height of the frames in the video stream.o CV_CAP_PROP_FPS Frame rate.o CV_CAP_PROP_FOURCC 4-character code of codec.o CV_CAP_PROP_FRAME_COUNT Number of frames in the video file.o CV_CAP_PROP_FORMAT Format of the Mat objects returned by retrieve() .o CV_CAP_PROP_MODE Backend-specific value indicatingthe current capture mode.o CV_CAP_PROP_BRIGHTNESS Brightness of the image (onlyfor cameras).o CV_CAP_PROP_CONTRAST Contrast of the image (only forcameras).o CV_CAP_PROP_SATURATION Saturation of the image (onlyfor cameras).o CV_CAP_PROP_HUE Hue of the image (only for cameras).o CV_CAP_PROP_GAIN Gain of the image (only for cameras).o CV_CAP_PROP_EXPOSURE Exposure (only for cameras).o CV_CAP_PROP_CONVERT_RGB Boolean flags indicatingwhether images should be converted to RGB.o CV_CAP_PROP_WHITE_BALANCE_U The U value of thewhitebalance setting (note: only supported by DC1394 v 2.xbackend currently)o CV_CAP_PROP_WHITE_BALANCE_V The V value of thewhitebalance setting (note: only supported by DC1394 v 2.xbackend currently)o CV_CAP_PROP_RECTIFICATION Rectification flag forstereo cameras (note: only supported by DC1394 v 2.x backendcurrently)o CV_CAP_PROP_ISO_SPEED The ISO speed of the camera(note: only supported by DC1394 v 2.x backend currently)o CV_CAP_PROP_BUFFERSIZE Amount of frames stored ininternal buffer memory (note: only supported by DC1394 v2.x backend currently)•value– Value of the property.参数:propId -属性标识符。
OpenCV简介

江西财经大学
OpenCV数据结构 数据结构
CvPoint 二维坐标系下的点, 二维坐标系下的点,类型为整型 typedef struct CvPoint { int x; /* X坐标 通常以 为基点 */ 坐标, 坐标 通常以0为基点 int y; /* y坐标, 通常以0为基点 */ y坐标 通常以0为基点 坐标, }CvPoint; 构造函数 inline CvPoint cvPoint( int x, int y ); /* 从 CvPoint2D32f类型转换得来 */ 类型转换得来 inline CvPoint cvPointFrom32f( CvPoint2D32f point ) 变体类型: 变体类型:CvPoint2D32f和CvPoint3D32f 和
江西财经大学
CvMat数据的存取 数据的存取3 数据的存取
由于计算机视觉是一种运算密集型的任务, 由于计算机视觉是一种运算密集型的任务,通过移动指针 来访问矩阵元素能够提高效率。 来访问矩阵元素能够提高效率。 通过指针访问矩阵元素是通过step元素和指针来实现的, 元素和指针来实现的, 通过指针访问矩阵元素是通过 元素和指针来实现的 step元素是矩阵行的长度,单位是字节,出于效率的考 元素是矩阵行的长度, 元素是矩阵行的长度 单位是字节, 矩阵或图像的内存分配都是4字节的整数倍 因此, 字节的整数倍, 虑,矩阵或图像的内存分配都是 字节的整数倍,因此, 三个字节宽度的矩阵将被分配成4个字节 个字节, 三个字节宽度的矩阵将被分配成4个字节,最后一个字节 将被忽略。 将被忽略。 一个指向数据元素的指针与step相加可以得到指向这个 相加可以得到指向这个 一个指向数据元素的指针与 点的下一行元素的指针。 点的下一行元素的指针。
OpenCV读取图像 显示图像和保存图像

读入图像﹑显示图像和保存图像是图像处理过程中最基本的,也是必不可少的操作.配置好OpenCV以后,包含以下两个头文件:#include "cv.h"#include "highgui.h"IplImage* image=cvLoadImage("D:\\123.jpg",-1);//函数cvLoadImage()的第1个参数是图像文件的路径.//第2个参数是读取图像的方式:-1表示按照图像本身的类型来读取,1表示强制彩色化,0表示//强制灰值化.if(image==NULL){MessageBox("无法读取图像数据!", "提示",MB_OK);//在MFC工程中这样用//若在win32控制台程序中,用printf("无法读取图像数据!\n");return;//不作任何操作,就不会执行后面的程序了}cvNamedWindow("图像显示",CV_WINDOW_AUTOSIZE);//该函数的功能是按照指定方式创建一个窗口,用于显示图像.//第1个参数是窗口的名称,自己可以任意设置//第2个参数表示窗口的大小会自动根据图像尺寸而变化cvShowImage("图像显示",image);//该函数的功能是在指定的窗口上显示图像.//第1个参数是显示图像窗口的名称//第2个参数是要显示的图像cvSaveImage("D:\\saveImage.jpg",image);//该函数的功能是将图像另存为//第1个参数是保存的路径,自己可以设置其它路径//第2个参数是要保存的图像cvWaitKey(0);//一直等待按键没有这句的话图像不能正常显示cvReleaseImage(&image);//释放图像内存cvDestroyWindow("图像显示");//销毁窗口资源//读取和显示完图像之后,要及时释放所占的内存资源.运行示例:。
opencvffmpeg详细解析

opencvffmpeg详细解析OpenCV是一个开源的计算机视觉库,而FFmpeg是一个开源的音视频处理工具包。
两者结合使用可以实现强大的音视频处理功能。
本文将详细解析OpenCV和FFmpeg的结合使用。
OpenCV是一个广泛应用于计算机视觉领域的库,它提供了丰富的图像和视频处理函数。
通过OpenCV,可以轻松读取、处理和显示图像和视频。
而FFmpeg则是一个专注于音视频处理的工具包,它提供了丰富的音视频编解码、转换、过滤等功能。
在使用OpenCV和FFmpeg结合进行音视频处理时,首先需要确保已经正确安装了OpenCV和FFmpeg,并且编译时已经将它们绑定在一起。
然后,可以通过以下步骤进行音视频处理:1. 打开视频文件:可以使用FFmpeg提供的函数打开视频文件,并获取视频流的相关信息,如分辨率、帧率等。
2. 读取视频帧:使用OpenCV的函数读取视频帧,可以通过指定帧索引或时间戳来读取指定位置的帧。
3. 进行图像处理:可以使用OpenCV提供的图像处理函数对读取的视频帧进行各种操作,如图像增强、滤波、边缘检测等。
4. 进行视频处理:可以使用OpenCV提供的视频处理函数对读取的视频帧进行各种操作,如运动估计、目标检测、视频合成等。
5. 编码和保存:使用FFmpeg提供的编码函数将处理后的视频帧进行编码,并保存为指定的格式和文件。
通过以上步骤,可以实现各种音视频处理功能,如实时视频处理、视频编辑、视频转码等。
而OpenCV和FFmpeg的结合使用不仅可以提供丰富的处理功能,还可以充分发挥它们各自的优势,实现更高效的处理效果。
需要注意的是,在使用OpenCV和FFmpeg进行音视频处理时,需要注意以下几点:1. 输入输出格式的兼容性:要确保输入的视频格式与OpenCV和FFmpeg支持的格式兼容,否则可能无法正常处理。
2. 内存管理:在处理大规模的视频数据时,需要注意内存的管理,避免因内存不足导致程序崩溃。
Opencv文件操作与数据存储

数据存储OpenCV提供了一种机制来序列化(serialize)和去序列化(de-serialize)其各种数据类型,可以从磁盘中按YAML或XML格式读/写。
在第4章中,我们将专门介绍存储和调用常见的对象IplImages的函数(cvSaveImage()和cvLoadImage())。
此外,第4章将讨论读/写视频的特有函数:可以从文件或者摄影机中读取数据的函数cvGrabFrame()以及写操作函数cvCreateVideoWriter()和cvWriteFrame()。
本小节将侧重于一般对象的永久存储:读/写矩阵、OpenCV结构、配置与日志文件。
首先,我们从有效且简便的OpenCV矩阵的保存和读取功能函数开始。
函数是cvSave()和cvLoad()。
例3-15展示了如何保存和读取一个5×5的单位矩阵(对角线上是1,其余地方都是0)。
例3-15:存储和读取CvMat1.CvMat A= cvMat( 5, 5, CV_32F, the_matrix_data );2.3.cvSave( "my_matrix.xml", &A );4.. . .5.// to load it then in some other program use …6.CvMat* A1= (CvMat*) cvLoad( "my_matrix.xml" );CxCore参考手册中有整节内容都在讨论数据存储。
首先要知道,在OpenCV中,一般的数据存储要先创建一个CvFileStorage结构(如例3-16)所示,该结构将内存对象存储在一个树形结构中。
然后通过使用CV_STORAGE_READ参数的cvOpenFileStorage()从磁盘读取数据,创建填充该结构,也可以通过使用CV_STORAGE_WRITE的cvOpenFileStorage()创建并打开CvFileStorage写数据,而后使用适当的数据存储函数来填充它。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
该模块包括运动估计,背景分离,对象跟踪等视频处理相关内容 [Videostab]: Video stabilization,视频稳定相关的组件 3、参考文献 [1] /pro/html/201404/12370.html(本文中绝大部分内容出 自此博客) [2] /item/HPP?fr=aladdin
[flann]: Fast Library for Approximate Nearest Neighbors,高维的近似近邻 快速搜索算法库, 包含两个部分:快速近似最近邻搜索和聚类
[gpu]: 运用 GPU 加速的计算机视觉模块
[highgui]: 也就是 high gui,高层 GUI 图形用户界面,包含媒体的 I / O 输入输出, 视频捕捉、图像和视频的编码解码、图形交互界面的接口等内容
其解释如下:
[calib3d]: 其实就是就是 Calibration(校准)加 3D 这两个词的组合缩写。这个模 块主要是相机校准和三维重建相关的内容。基本的多视角几何算法,单个立体摄像头 标定,物体姿态估计,立体相似性算法,3D 信息的重建等等。
[contrib]:也就是 Contributed/Experimental Stuf 的缩写, 该模块包含了一些最近 添加的不太稳定的可选功能,不用去多管。2.4.10 里的这个模块有新型人脸识别, 立体匹配 ,人工视网膜模型等技术。
[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
openCV 之头文件分析
我们利用 openCV 开源库进行项目开发时,往往要牵涉到头文件的添加问题,而 o penCV 中头文件众多,该如何选择呢?下面对 openCV2.4.10 的头文件进行一个简单的梳理, 以便能够快速的添加对应的头文件。
1、首先看下 opencv 文件夹中的头文件
其中 cv.h 中包含的头文件: #include "opencv2/core/core_c.h" #include "opencv2/core/core.hpp" #include "opencv2/imgproc/imgproc_c.h" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/video/tracking.hpp" #include "opencv2/features2d/features2d.hpp" #include "opencv2/flann/flann.hpp" #include "opencv2/calib3d/calib3d.hpp" #include "opencv2/objdetect/objdetect.hpp" #include "opencv2/legacy/compat.hpp"
图像的几何变换
其它(Miscellaneous)图像转换 直方图相关 结构分析和形状描述 运动分析和对象跟踪 特征检测 目标检测等内容
[features2d]: 也就是 Features2D, 2D 功能框架 ,包含如下内容
特征检测和描述 特征检测器(Feature Detectors)通用接口 描述符提取器(Descriptor Extractors)通用接口 描述符匹配器(Descriptor Matchers)通用接口 通用描述符(Generic Descriptor)匹配器通用接口 关键点绘制函数和匹配功能绘制函数
#define HAVE_OPENCV_FLANN #define HAVE_OPENCV_GPU #define HAVE_OPENCV_HIGHGUI #define HAVE_OPENCV_IMGPROC #define HAVE_OPENCV_LEGACY #define HAVE_OPENCV_ML #define HAVE_OPENCV_NONFREE #define HAVE_OPENCV_OBJDETECT #define HAVE_OPENCV_OCL #define HAVE_OPENCV_PHOTO #define HAVE_OPENCV_STITCHING #define HAVE_OPENCV_SUPERRES #define HAVE_OPENCV_TS #define HAVE_OPENCV_VIDEO #define HAVE_OPENCV_VIDEOSTAB
文件夹 opencv 中的头文件都是类似的,均包含文件夹 opencv2 里的头文件。所 以我们如果是从低版本的 opencv 学习过渡到高版本的 opencv 的话,如果不适应可以先以 o
pencv 文件夹里的文件调用为标准。如果熟悉 opencv 里的函数分布,也可以直接调用 open cv2 文件夹里的具体头文件,这样在头文件预编译提高效率。
[nonfree]: 也就是一些具有专利的算法模块 ,包含特征检测和 GPU 相关的内容。 最好不要商用,可能会被告哦。
[objdetect]: 目标检测模块,包含 Cascade Classification(级联分类)和 Latent SVM 这两个部分。
[ocl]: 即 OpenCL-accelerated Computer Vision,运用 OpenCL 加速的计算机视觉组 件模块
cv.hpp 中包含头文件:
#include <cv.h> 也就是说 cv.hpp 是包含 cv.h 的,程序中凡用到 cv.h 的地方都可以用 cv.hpp 替
换,那么为什么又要设置 hpp 文件呢?hpp 是 Header Plus Plus 的简写,与 *.h 文件类似。 但与之不同的是,*.hpp 将*.cpp 中的实现代码也写入其中,使得定义与实现都包含在同一 文件中。这样做带来的好处显而易见,无需再将 cpp 文件添加到项目中编译,减少了编译次 数,也不用发布烦人的 lib,dll 文件,因此非常适合用来编写公用的开源库。
[photo]: 也就是 Computational Photography,包含图像修复和图像去噪两部分
[stitching]: images stitching,图像拼接模块,包含如下部分:
拼接流水线 特点寻找和匹配图像 估计旋转 自动校准 图片歪斜 接缝估测 曝光补偿 图片混合
[superres]: SuperResolution,超分辨率技术的相关功能模块
[core]: 核心功能模块,包含如下内容
OpenCV 基本数据结构 动态数据结构 绘图函数 数组操作相关函数 辅助功能与系统函数和宏 与 OpenGL 的互操作
[imgproc]: Image 和 Processing 这两个单词的缩写组合。图像处理模块,这个模 块包含了如下内容
线性和非线性的图像滤波
2、接下来看文件夹 opencv2 中的文件
先看 opencv.hpp 文件: #include "opencv2/core/core_c.h" #include "opencv2/core/core.hpp" #include "opencv2/flann/miniflann.hpp" #include "opencv2/imgproc/imgproc_c.h" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/photo/photo.hpp" #include "opencv2/video/video.hpp" #include "opencv2/features2d/features2d.hpp" #include "opencv2/objdetect/objdetect.hpp" #include "opencv2/calib3d/calib3d.hpp" #include "opencv2/ml/ml.hpp" #include "opencv2/highgui/highgui_c.h" #include "opencv2/highgui/highgui.hpp" #include "opencv2/contrib/contrib.hpp" 很明显 opencv.hpp 的头文件包含了 opencv 库里的所有头文件。 接着看 opencv_modules.hpp 文件: #define HAVE_OPENCV_CALIB3D #define HAVE_OPENCV_CONTRIB #define HAVE_OPENCV_CORE #define HAVE_OPENCV_FEATURES2D
[legacy]: 一些已经废弃的代码库,保留下来作为向下兼容,包含如下相关的内容
运动分析 期望最大化 直方图 平面细分(C API) 特征检测和描述(Feature Detection and Description) 描述符提取器(Descriptor Extractors)的通用接口 通用描述符(Generic Descriptor Matchers)的常用接口 匹配器