关闭

《opencv 入门教程》

253人阅读 评论(0) 收藏 举报
分类:

一幅图像可以看做是一个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分量 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:27033次
    • 积分:1060
    • 等级:
    • 排名:千里之外
    • 原创:79篇
    • 转载:23篇
    • 译文:0篇
    • 评论:1条