前言:opencv中,,mat类型非常基础和重要。以下是opencv tutorial 2.1章节的中英文整理。
Mat简介
IplImage c结构 需要管理内存
class自动内存分配
Mat包括:
header
A pointer to the matrix containing the pixel values(can takedimentionlity根据存储方法)
头大小不变
将图像传给函数是常见做法
图像处理很耗计算量避免不必要的大图像复制
引用计数 reference counting
Mat D = A(Rect(10,10,100,100) )//use a Rect
Mat E = A(Range:all(),range(1,3);
whenever a header is cleaned, the counter is decreased. When the counter is zero, the matrix is freed.
复制矩阵数据的方式:修改F G 不会影响A
Mat F = A.Clone()
Mat G; A.CopyTo(G);
) mask
Opencv c++ interface 都不用考虑内存释放 memory freeing
mat创建方式
Mat B(A) //copy constructor
Mat C = A // assignment operator 只复制头
A B C point to the same single matrix
保存方法:
Grayscale
RGB适合人眼系统
HSV对光照不敏感
YCrCb jpeg图像格式
CIE Lab用来计算颜色距离
code the transparency of a color alpha(A)is needed
Data type: denth=深度
最小的是char 分为 unsignedsigned(-127-127) 1byte Int 是2个字符呦Float 32bits 4bytesDouble 64bits 8 bytesInt类型的宏
#define CV_8U 0
#define CV_8S 1
#define CV_16U 2
#define CV_16S 3
#define CV_32S 4
#define CV_32F 5
#define CV_64F 6
#define CV_8UC1 CV_MAKETYPE(CV_8U,1)
#define CV_8UC2 CV_MAKETYPE(CV_8U,2)
#define CV_8UC3 CV_MAKETYPE(CV_8U,3)
#define CV_8UC4 CV_MAKETYPE(CV_8U,4)
#define CV_8UC(n) CV_MAKETYPE(CV_8U,(n))
#define CV_8SC1 CV_MAKETYPE(CV_8S,1)
#define CV_8SC2 CV_MAKETYPE(CV_8S,2)
#define CV_8SC3 CV_MAKETYPE(CV_8S,3)
#define CV_8SC4 CV_MAKETYPE(CV_8S,4)
#define CV_8SC(n) CV_MAKETYPE(CV_8S,(n))
#define CV_16UC1 CV_MAKETYPE(CV_16U,1)
#define CV_16UC2 CV_MAKETYPE(CV_16U,2)
#define CV_16UC3 CV_MAKETYPE(CV_16U,3)
#define CV_16UC4 CV_MAKETYPE(CV_16U,4)
#define CV_16UC(n) CV_MAKETYPE(CV_16U,(n))
#define CV_16SC1 CV_MAKETYPE(CV_16S,1)
#define CV_16SC2 CV_MAKETYPE(CV_16S,2)
#define CV_16SC3 CV_MAKETYPE(CV_16S,3)
#define CV_16SC4 CV_MAKETYPE(CV_16S,4)
#define CV_16SC(n) CV_MAKETYPE(CV_16S,(n))
#define CV_32SC1 CV_MAKETYPE(CV_32S,1)
#define CV_32SC2 CV_MAKETYPE(CV_32S,2)
#define CV_32SC3 CV_MAKETYPE(CV_32S,3)
#define CV_32SC4 CV_MAKETYPE(CV_32S,4)
#define CV_32SC(n) CV_MAKETYPE(CV_32S,(n))
#define CV_32FC1 CV_MAKETYPE(CV_32F,1)
#define CV_32FC2 CV_MAKETYPE(CV_32F,2)
#define CV_32FC3 CV_MAKETYPE(CV_32F,3)
#define CV_32FC4 CV_MAKETYPE(CV_32F,4)
#define CV_32FC(n) CV_MAKETYPE(CV_32F,(n))
#define CV_64FC1 CV_MAKETYPE(CV_64F,1)
#define CV_64FC2 CV_MAKETYPE(CV_64F,2)
#define CV_64FC3 CV_MAKETYPE(CV_64F,3)
#define CV_64FC4 CV_MAKETYPE(CV_64F,4)
#define CV_64FC(n) CV_MAKETYPE(CV_64F,(n))
加载图像Load image
E.g. Mat M = imread(file name,1)
E.g Mat A(2,2,CV_8UC3, Scalar(0,0,255))
IplImage –>mat
IplImage *img = cvLoadImage(filename,1)
Mat mtx(img) //只创造头 共享矩阵数据
create函数
Mat M;
无论何时何地,只要创造就有收获,只有不息的奋进,才能证明生命的存在。