计算机视觉与图像处理学习笔记(三)opencv的基本数据类型与简单图像处理函数

1.首先需要知道的是opencv中的c++类和函数都是定义在命名空间cv之内的,所以如果不想在每次使用的时候都写上cv::,最好像使用std那样在前面加上

using namespace cv;


2.基本类型之Mat

Mat是C++接口中的一个类,在内存管理方面比C接口中的类型更好,不需要考虑内存释放问题,它由两个数据部分组成:矩阵头和一个指向存储所有像素值的矩阵的指针。

这种结构的好处是可以很好的节省空间,两个表示同一矩阵的Mat只需指向同一片区域就可以了,赋值与构造函数拷贝的时候也不需要整片区域的拷贝,也就是说不同的对象只是访问相同数据的不同途径而已,这样从效率和管理上都有很大的好处。而如果需要拷贝整片区域时,可以使用函数clone()或者copyTo()来拷贝一副图像的矩阵。

关于构造函数

Mat M(2,2, CV_8UC3, Scalar(0,0,255));

这是一个典型的Mat的构造实例,前两个数字对应于行列数,第三个表示存储的数据类型,第四个scalar是个short型vector,指定这个能够使用指定的定制化值来初始化矩阵,如果不写第四个参数,还可以通过randu()填充指定上下界的随机数。此外,如果需要表示三维,则可以将列数换为一维数组的指针。

以下为类型的定义方式:

CV_[The number of bits per item][Signed or Unsigned][Type Prefix]C[The channel number]
因此这个实例使用的类型为8位的 unsigned char 型,每个像素由三个元素组成三通道。

也可以使用Mat或IplImage指针类型作为单一参数进行构造。
此外还有create()、eye()、ones()、zeros()等初始化方法,详细参见API文档。


3.基本类型之点

如下是二维点的定义方式:

Point2f P(5, 1);
同理三维为Point3f。


4.基本类型之STL数据结构

以vector为代表的众多STL数据结构都是可以和opencv很好的结合使用的,比如:可以定义Point2f类型的vector。


5.简单图像处理函数之imread()

顾名思义,读入一张图像,函数原型为

Mat imread(const string& filename, intflags=1 ); 
第一个参数为文件名,支持大多数图像格式,第二个为参数为色彩类型,缺省会默认为1,对应数值与色彩类型关系如下:

/* 8bit, color or not */  
   CV_LOAD_IMAGE_UNCHANGED  =-1,  
/* 8bit, gray */  
   CV_LOAD_IMAGE_GRAYSCALE  =0,  
/* ?, color */  
   CV_LOAD_IMAGE_COLOR      =1,  
/* any depth, ? */  
   CV_LOAD_IMAGE_ANYDEPTH   =2,  
/* ?, any color */  
   CV_LOAD_IMAGE_ANYCOLOR   =4  
可以看到默认1其实是三通道彩色图像

6.简单图像处理函数之namedWindow()

作用是创建一个窗口,函数原型为

void namedWindow(const string& winname,int flags=WINDOW_AUTOSIZE );
第一个参数表示窗口名,第二个参数有三个值

WINDOW_NORMAL//用户便可以改变窗口的大小
WINDOW_AUTOSIZE//窗口大小自动调整,不能手动改变窗口大小。
WINDOW_OPENGL //支持OpenGL。
注意:如果具有相同名称的窗口已经存在,则函数不做任何事情。

7.简单图像处理函数之imshow()

在创建的窗口显示图像,函数原型为

void imshow(const string& winname, InputArray mat); 

第一个参数显然是窗口名称,第二个参数InputArray类型其实是Core.hpp中定义的class CV_EXPORTS _InputArray类,我没有过多的深入,只是知道大部分情况下,可以当作Mat来处理.

注意imshow会根据像素值对图像进行处理,总的来说是将像素值映射到[0,255]的区间上,便于用8位表示。


8.简单图像处理函数之imwrite()

输出图像到文件,函数原型为

bool imwrite(const string& filename,InputArray img, const vector<int>& params=vector<int>() ); 

第一个参数是写入文件名,第二个参数是写入图像,第三个参数表示为特定格式保存的参数编码,对不同的图像格式有不同含义,具体参见API文档,一般不用填写。

下一篇将会用这些基本内容进行一次综合代码的分析。

转载注明出处:http://blog.csdn.net/accepthjp


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值