OpenCV 基础入门 基于官方文档的解读(1)--初识opencv

初识opencv是今年的3,4月份,缘由是我个人负责小组国创项目的编程工作,国创项目是关于支持向量机处理视频方面的,刚刚接到项目的时候我们一头雾水,什么是svm?什么是机器学习?视频的组成原理(虽然很早就知道是很多图片连在一起,但现在遇到的问题还有视频在计算机中的存储原理)?对于初出茅庐的我们遇到了很多问题,然后开始了算法学习之路,开始是找各种资料学习支持向量机算法,慢慢开始做实验,做实验的过程中需要处理大量视频和图片,所以我come across 了opencv这个计算机视觉库,个人觉得这个视觉库虽然没有matlab处理方便,但是它是基于c/c++的并且是开源的,所以执行效率和可改造性都很好。所以一头扎进了OpenCV学习中。

OpenCV是一个开源的计算机视觉库(Open Source Computer Version Library) 以前的1.x版本是基于C语言接口的,后来面向对象的C++出现后,相应的出现了OpenCV的2.x接口,学过C和C++的同学应该知道区别在哪,对于OpenCV来说影响最大的就是内存的管理,原来的版本需要你手动去管理内存,而C++ API 因为引入了类,使得有些内存管理不需要手动操作,虽然对于代码量很小的应用程序来说没什么区别,但是当代码量相当大且结构复杂的时候编写程序过程中就会因为内存的管理出现问题,这时候不得不去处理这些问题,所以后来的2.x版本以及现在的3.x版本优势还是很大的。尤其是对于OpenCV这种处理图形(需要合理使用内存)的库来说,内存的管理尤为重要。清楚的记得一次做实验用的C接口的函数(当时还没搞清楚原理只是简单的小实验)就出现了运行结束后有异常出现,原因就是调用图片的函数最后没有及时回收导致堆栈溢出。现在的版本几乎很少遇到这种问题了,因为对象内部会自己释放空间。

OpenCV如今已经模块化了,用官方文档的语言就是 OpenCV has a modular structure。它包含了图像处理,视频处理等诸多模块,下面简单介绍一下各个模块。

OpenCV包中的opencv/sources/modules文件夹中可以看到各个模块


core--核心功能
imgproc--图像处理
highgui--高层GUI和多媒体i/o
video--视频分析
calib.3d--相机标定和3D建模
features--2D特征架构
object--物体检测
ml--机器学习
flann--多维空间聚类和搜索
gpu--GPU机器加速视觉
photo--计算摄影
stitching--图像拼接
ocl--OpenGL计算机加速视觉
viz--3D视觉
 
不同模块有不同的应用的功能,常用的有core,imgproc,video,calib3d,feature2d,objdetect,highgui,gpu几个模块。

关于OpenCV的命名空间,这是C++的一个特性,我们C++中经常见到using namespace std这样的命名空间,也就是标准的命名空间。同样OpenCV也有自己的命名空间。想要使用OpenCV函数,必须通过cv命名空间。

例如

#include <opencv2/core/core.hpp>
cv::Mat H = cv::findHomography(p1, p1, CV_RANDSAC,5);

or
#include <opencv2/core/core.hpp>
using namespace cv;
Mat H = findHomography(p1, p2, CV_RANSAC, 5);
上面代码通过cv命名空间创建了一个Mat类型的对象H并且进行了初始化,只是单纯为了说明cv的使用,如果不能理解的可以去学习C++的命名空间那一讲。
后面我会陆续介绍OpenCV各个模块的使用以及结构和函数原理。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值