1.设置矩阵的值
img.setTo(0); //对于1个通道的图像
img.setTo(Scalar(B,G,R)); //对于3个通道的图像
2.Matlab风格的矩阵初始化
Mat m1 = Mat::eye(100,100,CV_64F);
Mat m2 = Mat::zeros(100,100,CV_8UC1);
Mat m2 = Mat::ones(100,100,CV_8UC1)*255
3.随机初始化
Mat img1 = Mat(100,100,CV_8UC1);
randu(m1,0,255);
4.创建矩阵的一个副本(复制)
Mat img1 = img.clone();
5.创建一个(具有掩码)矩阵的副本
img.copy(img1,mask);
6.引用一个子矩阵(不复制数据)
Mat img1 = img(range(r1,c2),range(c1,c2));
7.图像裁剪
Rect roi(r1,c2,width,height);
Mat img1 = img(roi).clone(); //数据拷贝
8.调整图像大小
resize(img,image1,Size(),0.5,0.5); //将图像变为原来的1/2
9.翻转图像
flip(imgsrc,imgdst,code); //code=0时,垂直翻转;
//code>0时,水平翻转;
//code<0时,垂直和水平翻转
10.分割通道
Mat channel[3];
split(img,channel);
imshow("B",channel[0]); //显示蓝波段
11.合并通道
merge(channel,img);
12.统计非零像素的数量
int nz = countNonZero(img);
13.最小值和最大值
double m,M;
Point mLoc,MLoc;
minMaxLoc(img,&m,&M,&mLoc,&MLoc);
14.像素值均值
Scalar m,stdd;
meanStdDev(img,m,stdd);
uint mean_px1 = mean.val[0];
15.检查图像数据是否为空
if (img.empty())
cout << "couldn'tn load image" << endl;
尾注:
对于耗费时间的图像处理程序,可用如下方式测量耗时,即计时器功能。需要用到函数getTickCount()和函数getTickFrequency()。示例如下:
//t0为计时的初始值
double t0 = (double)getTickCount();
//elapsed为测量值,即最终耗时,单位时秒(S)
elapsed = ((double)getTickCount() - t0)/getTickFrequency();