1、读取方式:
cv::mat img = cv::imread(file,-1);
2、访问mat中的元素:
首先将mat转化为float32位类型:img.convertTo(img,CV_32FC3);
访问每个像素:img.at<cv::Vec3f>(i,j)[2],这是访问img中i行j列R通道的像素值,img.at<cv::Vec3f>(i,j)[1],这是访问img中i行j列G通道的像素值,img.at<cv::Vec3f>(i,j)[0],这是访问img中i行j列B通道的像素值。
//2017/2/6
1、如何合并两个Mat:
vconcat(A,B,C):就是把A和B合并保存到C,并且C的行数应该等于A的行数加B的行数,C的列数等于A和B的列数。
hconcat(A,B,C):就是把A和B合并保存到C,并且C的列数应该等于A的列数加B的列数,C的行数等于A和B的行数。
//2017/2/22
1、mat类型没有mod(余除)函数
2、mat没有fix(相当于显示类型转换为int类型)函数。
3、获取mat矩阵的某一列:mat.col(n);某一行mat.row(n);
4、获取mat矩阵的某几列(连续的几列):mat.colrange(0,n);某几行(连续的几行):mat.rowrange(0,n);
5、两个mat进行点乘,也就是两个矩阵对应位置相乘,要求两个矩阵行列数必须相等,结果矩阵的行列数跟相乘的两个矩阵的行列数也相等:matC=matA.mul(matB);
6、创建值全为1的mat矩阵:cv::Mat::ones(cv::Size(r,c),CV_32FC1);
7、mat矩阵的转置:matA.t()
8、对于两个nx1或者1xn的mat矩阵:matA和matB,cv::max(matA,matB)可以得到两个矩阵每个对应位置的较大的值组成的nx1或者1xn的mat矩阵。
9、repeat函数的用法:repeat(matA,n,m)就是将matA矩阵复制nxm次
10、mat矩阵没有给定一个索引矩阵从而得到索引所对应矩阵值得函数。
11、mat矩阵减去标量值,如果一个矩阵是单通道则直接减去标量值,如果是矩阵是三通道,则应该减去cvScalar(1,1,1);
12、创建一个矩阵,并且想给这个矩阵初始化为某个值:cv::Mat matA(n,m,CV_32FC1,cv:;Scalar(a));即将nxm的矩阵初始化为全a的值。
13、将一个3通道的mat矩阵分解成三个单通道:split(matA,matB_V),这里matA是个3通道的mat矩阵,matB_V则是一个vector<cv:Mat>容器。matA的三个通道分别作为mat矩阵放到matB_V容器中。
14、对于一个matC,tmp_matC是matC的一部分,对于另一个矩阵matB,tmp_matB是matB的一部分,把tmp_matB里的值赋给tmp_matC的方法可以用:tmp_matB.copyTo(tmp_matC)函数。
15、opencv在图片上画矩形框:
cv::rectangle(img,Point(x1,y1),Point(x2,y2),Scalar(0,0,255),1,8)
16、opencv在图片上画点(圆圈):
cv::circle(img,Point(x,y),1,Scalar(255,255,255))