您的位置:首页 > 运维架构

OpenCV学习笔记(一)图像的载入,显示和输出

2016-11-10 15:58 225 查看

0 开胃菜

0.1 Opencv的头文件和命名空间

命名空间

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中的配置,没有好与不好之分。

0.2 关于Mat类型

对于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函数这篇文章的下文就会详细剖析到。

1 图像的载入和显示

在新版本的OpenCV2中,最简单的图像载入和显示只需要3句代码,非常便捷。这三句代码分别对应了三个函数,他们分别是:

imread( ), namedWindow( )以及imshow( )。我们依次来解析一下这三个函数。

1.1 imread函数

函数原型:

Mat imread(const string& filename, int flags=1 );

参数:

const string& filename

填写我们需要载入的图片的路径。

在OpenCV的imread函数支持如下类型的图像载入:

•Windows位图 - * .bmp, * .dib

•JPEG文件 - * .jpeg, * .jpg, * .jpe

•JPEG 2000文件- * .jp2

•PNG图片 - * .png

•便携文件格式- * .pbm, * .pgm, * .ppm

•Sun rasters光栅文件 - * .sr, * .ras

•TIFF 文件 - * .tiff,* .tif

2.int flags

载入标识:他可以指定当前加载图像的颜色类型。

缺省值为1:三通道彩色图像。

参考:

本系列文章是学习下列文章的笔记。

@浅墨_毛星云 出品,转载请注明出处。

文章链接: http://blog.csdn.net/poem_qianmo/article/details/20537737

作者:毛星云(浅墨) 邮箱: happylifemxy@163.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: