《opencv 入门教程》

原创 2015年07月07日 21:21:23

一幅图像可以看做是一个m*n的矩阵,矩阵的元素的值表示这个位置上的像素的亮度,一般像素值越大则表示该点越亮。

灰度图像:2维矩阵,彩色图像:3维矩阵。

图像数据在计算机内存中的存储顺序为以图像最左上角开始。

Mat 类定义里关键属性:

int flag;

int dims;

int rows,cols;

uchar*data;

构造Mat;

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

创建一个行数为3,列数为2的图像,图像元素是8位无符号整数类型,三个通道。且图像所有像素值被初始化为(0,0,255)

cout<<"M="<<M<<endl;

输出:

M=[0,0,255,0,0,255;

0,0,255,0,0,255;

0,0,255,0,0,255;

]

常用的构造函数有: 
  Mat::Mat() 
无参数构造方法; 
  Mat::Mat(int rows, int cols, int type) 
创建行数为 rows,列数为 col,类型为 type 的图像; 
  Mat::Mat(Size size, int type) 
创建大小为 size,类型为type 的图像; 
  Mat::Mat(int rows, int cols, int type, const Scalar& s)  
行数为 rows,列数为 col,类型为 type 的图像,并将所有元素初始
化为值s; 
  Mat::Mat(Size size, int type, const Scalar& s) 
创建大小为 size,类型为type 的图像,并将所有元素初始化为值 s; 
  Mat::Mat(const Mat& m) 
将m 赋值给新创建的对象,此处不会对图像数据进行复制,m 和新对象
共用图像数据; 
  Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP) 
创建行数为 rows,列数为 col,类型为 type 的图像,此构造函数不创建
图像数据所需内存,而是直接使用 data 所指内存,图像的行步长由 step
指定。 
  Mat::Mat(Size size, int type, void* data, size_t step=AUTO_STEP) 
创建大小为 size,类型为type 的图像,此构造函数不创建图像数据所需
内存,而是直接使用 data 所指内存,图像的行步长由step 指定。 
  Mat::Mat(const Mat& m, const Range& rowRange, const Range& colRange) 
创建的新图像为 m 的一部分,具体的范围由 rowRange 和 colRange 指
定,此构造函数也不进行图像数据的复制操作,新图像与 m 共用图像数
据; 
  Mat::Mat(const Mat& m, const Rect& roi) 
创建的新图像为 m 的一部分,具体的范围 roi 指定,此构造函数也不进
行图像数据的复制操作,新图像与 m 共用图像数据。

type可以是CV_8UC1, CV_16SC1, …,
CV_64FC4 等。里面的 8U表示8 位无符号整数,16S 表示16 位有符号整数,64F
表示64 位浮点数(即double 类型);C后面的数表示通道数,例如 C1 表示一个
通道的图像,C4 表示 4 个通道的图像.

可以用create进行创建图像

Mat M(2,2,CV_8UC3);

M.create(3,2,CV_8UC2);

注意,使用create()函数时,无法设置图像像素的初始值。



OpenCV 2 中提供了Matlab 风格的函数,

如zeros(),ones()和eyes()。这种方
法使得代码非常简洁,使用起来也非常方便。使用这些函数需要指定图像的大小
和类型,使用方法如下: 
Mat Z = Mat::zeros(2,3, CV_8UC1); 
cout << "Z = " << endl << " " << Z << endl; 
 
Mat O = Mat::ones(2, 3, CV_32F);     
cout << "O = " << endl << " " << O << endl; 
 
Mat E = Mat::eye(2, 3, CV_64F);     
cout << "E = " << endl << " " << E << endl; 


Vec类预定义了一些小向量,可以将之用于矩阵元素的表达。

typedef Vec<uchar, 2> Vec2b; 
typedef Vec<uchar, 3> Vec3b; 
typedef Vec<uchar, 4> Vec4b; 
 
typedef Vec<short, 2> Vec2s; 
typedef Vec<short, 3> Vec3s; 
typedef Vec<short, 4> Vec4s; 
 
typedef Vec<int, 2> Vec2i; 
typedef Vec<int, 3> Vec3i; 
typedef Vec<int, 4> Vec4i; 
 
typedef Vec<float, 2> Vec2f; 
typedef Vec<float, 3> Vec3f; 
typedef Vec<float, 4> Vec4f; 
typedef Vec<float, 6> Vec6f; 
 
typedef Vec<double, 2> Vec2d; 
typedef Vec<double, 3> Vec3d; 
typedef Vec<double, 4> Vec4d; 
typedef Vec<double, 6> Vec6d;


Vec3b color; //用color 变量描述一种 RGB颜色 
color[0]=255; //B分量 
color[1]=0; //G分量 
color[2]=0; //R分量 

相关文章推荐

【OpenCV入门教程之五】 分离颜色通道&多通道图像混合

上篇文章中我们讲到了使用addWeighted函数进行图像混合操作,以及将ROI和addWeighted函数结合起来使用,对指定区域进行图像混合操作。 而为了更好的观察一些图像材料的特征,有时需要对R...
  • zhmxy555
  • zhmxy555
  • 2014年03月13日 17:09
  • 89648

【OpenCV入门教程之八】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波

【OpenCV入门教程之八】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波 分类: 【OpenCV】2014-04-01 21:18 1977人阅读 评论(19) 收藏 举报 图像...
  • pi9nc
  • pi9nc
  • 2014年04月05日 09:21
  • 17742

【OpenCV入门教程之三】 图像的载入,显示和输出 一站式完全解析

[-] 一开胃菜之一  关于OpenCV的命名空间二开胃菜之二  关于Mat类型三图像的载入和显示 imread函数namedWindow函数imshow函数 四输出图像到文件imwri...

【OpenCV入门教程之九】 非线性滤波专场:中值滤波、双边滤波

本系列文章由@浅墨_毛星云 出品,转载请注明出处。   文章链接: http://blog.csdn.net/poem_qianmo/article/de...
  • yuzeze
  • yuzeze
  • 2016年05月17日 15:43
  • 1680

学习【OpenCV入门教程之十一】 形态学图像处理(二)开运算,闭运算,梯度运算,顶帽,黑帽---思维导图笔记

今天学习了【OpenCV入门教程之十一】 形态学图像处理(二),@浅墨_毛星云 文章链接: http://blog.csdn.net/poem_qianmo/article/details/23184...

【OpenCV人脸识别入门教程之四】LBP人脸识别

本文使用OpenCV实现LBP人脸识别,并使用摄像头进行实时人脸识别。 系统:Windows7;OpenCV版本:2.4.10. 一、人脸识别的简单流程 二、代码实现...

OpenCV入门教程(2)-Mat类之像素的读写

主要借鉴书籍《OpenCV入门教程》一书,还有一些网上的博客等。

【OpenCV入门教程之六】 创建Trackbar & 图像对比度、亮度值调整

本系列文章由@浅墨_毛星云 出品,转载请注明出处。   文章链接: http://blog.csdn.net/poem_qianmo/article/details/21...

OPENCV入门教程七:颜色空间转换

一、目标学习把RGB(红绿蓝)空间的图像转化为其它空间的图像。 将RGB转化为HSV(色调(H),饱和度(S),明度(V)) 将RGB转化为Lab(颜色模型 (Lab) 基于人对颜色的感觉,L表示...

opencv入门教程-----图像的输入,显示和输出

本文根据浅墨大神文章学习加之实践后进行记录,代码经过本人运用并加之以注释和修改。博主准备以这种方式进行opencv的学习,顺便在学习大神之后记录自我的所学及收获,所以以后的文章大多会以这种形式记录。如...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《opencv 入门教程》
举报原因:
原因补充:

(最多只允许输入30个字)