前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >计算机视觉与图像处理学习笔记(三)opencv的基本数据类型与简单图像处理函数

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

作者头像
triplebee
发布2018-01-12 15:12:19
8690
发布2018-01-12 15:12:19
举报

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

代码语言:javascript
复制
using namespace cv;

2.基本类型之Mat

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

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

关于构造函数

代码语言:javascript
复制
Mat M(2,2, CV_8UC3, Scalar(0,0,255));

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

以下为类型的定义方式:

代码语言:javascript
复制
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.基本类型之点

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

代码语言:javascript
复制
Point2f P(5, 1);

同理三维为Point3f。

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

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

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

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

代码语言:javascript
复制
Mat imread(const string& filename, intflags=1 ); 

第一个参数为文件名,支持大多数图像格式,第二个为参数为色彩类型,缺省会默认为1,对应数值与色彩类型关系如下:

代码语言:javascript
复制
/* 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()

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

代码语言:javascript
复制
void namedWindow(const string& winname,int flags=WINDOW_AUTOSIZE );

第一个参数表示窗口名,第二个参数有三个值

代码语言:javascript
复制
WINDOW_NORMAL//用户便可以改变窗口的大小
WINDOW_AUTOSIZE//窗口大小自动调整,不能手动改变窗口大小。
WINDOW_OPENGL //支持OpenGL。

注意:如果具有相同名称的窗口已经存在,则函数不做任何事情。

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

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

代码语言:javascript
复制
void imshow(const string& winname, InputArray mat); 

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

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

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

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

代码语言:javascript
复制
bool imwrite(const string& filename,InputArray img, const vector<int>& params=vector<int>() ); 

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

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

转载注明出处

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-10-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档