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


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 );
参数:

  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

智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告