《opencv 入门教程》

一幅图像可以看做是一个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学习
想对作者说点什么? 我来说一句

OpenCV3.2 Java图像处理教程

-

学院

2017年09月04日 18:08

opencv教程

2017年07月25日 23.67MB 下载

OpenCV教程——基础篇》

2009年07月22日 3.3MB 下载

OpenCV

-

学院

2016年12月27日 16:02

OpenCV入门教程

2015年09月01日 1.88MB 下载

没有更多推荐了,返回首页

不良信息举报

《opencv 入门教程》

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭