opencv读取图像

来源:互联网 发布:unity3d做2d游戏 编辑:程序博客网 时间:2024/06/10 22:29

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))

0 0
原创粉丝点击