命名空间
OpenCV中的C++类和函数都是定义在命名空间cv之内的,有两种方法可以访问。第一种是,在代码开头的适当位置,加上usingnamespace cv;这句。
另外一种是在使用OpenCV类和函数时,都加入cv::命名空间。不过这种情况难免会不爽,每用一个OpenCV的类或者函数,都要多敲四下键盘写出cv::,很麻烦。
头文件
有两种包含头文件的方式:
①
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
②
#include <cxcore.h>
#include <cv.h>
#include <highgui.h>
using namespace cv;
这两种方式的作用应该是一样的,一个是在opencv1.0中的配置,一个是在opencv2.x中的配置,没有好与不好之分。
对于OpenCV1.0时代的基于 C 语言接口而建的图像存储格式IplImage*,如果在退出前忘记release掉的话,就会照成内存泄露。而且用起来超级麻烦,我们往往在debug的时候,很大一部分时间在纠结手动释放内存的问题。虽然对于小型的程序来说手动管理内存不是问题,但一旦我们写的代码变得越来越庞大,我们便会开始越来越多地纠缠于内存管理的问题,而不是着力解决你的开发目标。
这,就有些舍本逐末的感觉了。
自从OpenCV踏入2.0时代,用Mat类数据结构作为主打之后,OpenCV变得越发像需要很少编程涵养的Matlab那样,上手超级快。甚至有些函数名称都和matlab一样,比如大家所熟知的imread,imwrite,imshow等函数。
这对于我们广大图像处理领域的孩子们来说,这的确是一个可喜可贺的事情。
cv::Mat类是用于保存图像以及其他矩阵数据的数据结构。默认情况下,其尺寸为0,我们也可以指定初始尺寸,比如,比如定义一个Mat类对象,就要写cv::Mat pic(320,640,cv::Scalar(100));
Mat类型作为OpenCV2新纪元的重要代表“人物”,在稍后的文章中,会花长篇幅详细讲解它,现在我们只要理解,它是对应于OpenCV1.0时代的IplImage的主要用来存放图像的数据结构就行了。对于这篇文章,我们需要用到关于Mat其实就简单的这样一句代码:
Mat myMat= imread("dota.jpg");
表示从工程目录下把一幅名为dota.jpg的jpg类型的图像载入到Mat类型的myMat中。这里的imread函数这篇文章的下文就会详细剖析到。
在新版本的OpenCV2中,最简单的图像载入和显示只需要3句代码,非常便捷。这三句代码分别对应了三个函数,他们分别是:
imread( ), namedWindow( )以及imshow( )。我们依次来解析一下这三个函数。
函数原型:
Mat imread(const string& filename, int flags=1 );
参数:
参考:
本系列文章是学习下列文章的笔记。
@浅墨_毛星云 出品,转载请注明出处。
文章链接: http://blog.csdn.net/poem_qianmo/article/details/20537737
作者:毛星云(浅墨) 邮箱: happylifemxy@163.com
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。