欢迎来到天天文库
浏览记录
ID:22431126
大小:29.16 KB
页数:12页
时间:2018-10-29
《opencv 学习资料》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、OpenCV2.4.3CheatSheet学习(一)两年前用过OpenCV,感觉已经很爽了。这不,最近又要编个小程序,下了最新的OpenCV 2.4.3,呵呵,变化真大啊,叔叔几乎都认不出来了。原来,现在的OpenCV要向MATLAB靠拢,图像的操作方法变得不那么C了,更m了一些。比如,MATLAB中的常用函数imshow、imread、imwrite函数在OpenCV中已经有了同名的兄弟。此外,OpenCV 2.4.3中更加强调对矩阵的操作,以前的CvMat和CvArr目测现在正在被一个新成员Mat给后来居上了。在doc目录里出现了一个Cheat Sheet,好家伙,原来是OpenCV
2、的作弊纸呀,把基本用法整理成考试必备的模样,正好方便我们学习了。所以,我们来共同学习一下吧:一、矩阵基础操作:Mat image(240, 320, CV8UC3);第一个参数是rows,该矩阵的行数;第二个参数是cols,该矩阵的列数;第三个参数是该矩阵元素的类型。这句话表示创建一个大小为240×320的矩阵,里面的元素为8位unsigned型,通道数(channel)有3个。image.create(480, 640, CV8UC3);分配(或重新分配)image矩阵,把大小设为480×640,类型设为CV8UC3。Mat A33(3, 3, CV_32F, Scalar(5));定
3、义并初始化一个3×3的32bit浮点数矩阵,每个元素都设为5。Mat B33(3, 3, CV_32F);B33 = Scalar(5);和上面的作用一样。Mat C33 = Mat::ones(3, 3, CV32F)*5.;ones函数很像MATLAB里的语句吧。这句的意思是先定义一个3×3的32bit浮点数矩阵,元素全为1,所有元素再乘以5.0。Mat D33 = Mat::zeros(3, 3, CV32F) + 5.;和上面类似,先定义个3×3的32bit浮点数矩阵,元素全为0,再将所有元素加上5.0;double a = CV_PI/3;Mat A22 = (Mat_4、at>(2, 2) << cos(a), -sin(a), sin(a), cos(a));CV_PI就是少年派的那个派。第二句这个写法很牛x的样子,我也没见过,不过看样子是创建一个2×2的float矩阵,把后面四个三角函数值分别赋给4个元素。float B22data[] = {cos(a), -sin(a), sin(a), cos(a)};Mat B22 = Mat(2, 2, CV32F, B22data).clone();第一句创建一个普通数组B22data,第二句创建一个2×2的32bit浮点数矩阵,并使用用B22data数组里的值初始化,然后克隆一下赋给B22矩阵。为什么这5、里还要克隆一下,不是多此一举吗?不是的,用一个数组去初始化一个矩阵的话,你会发现这个矩阵引用了数组的内存地址。不克隆的话,上面例程的后果是B22data数组、Mat(2,2...)这个临时变量矩阵、B22矩阵这三把勺子都插在同一个碗里。randu(image, Scalar(0), Scalar(256));把image弄成一个符合正太分布的随机数矩阵,rand表示random,u表示uniform;第二个参数是随机数下限,方括号哦;第三个参数是随机数上限,圆括号。randn(image, Scalar(128), Scalar(10));高斯分布的随机数矩阵;第二个参数是均值,第三个参6、数是标差。Mat image_alias = image;没有拷贝里面的数据。float* Idata=new float[480*640*3];Mat I(480, 640, CV32FC3, Idata);第一句定义一个480×640×3×sizeof(float)字节这么大的数组;第二句创建一个矩阵I,引用的是Idata的地址。vector iptvec(10);Mat iP(iptvec); 还能和STL一起用啊,以前真不知道。第一句话创建了一个有10个Point的向量,注意Point有两个int型元素。第二句创建了一个矩阵,元素类型根据就自动设为CV_32SC2,7、表示32bit signed int,2个channel。IplImage* oldC0 = cvCreateImage(cvSize(320,240),16,1);Mat newC = cvarrToMat(oldC0);IplImage oldC1 = newC;CvMat oldC2 = newC;这是为了把经典的OpenCV图像导成矩阵,第一句创建一个320×240的图像;第二句话把IplImage转成Mat;第三句话把Ma
4、at>(2, 2) << cos(a), -sin(a), sin(a), cos(a));CV_PI就是少年派的那个派。第二句这个写法很牛x的样子,我也没见过,不过看样子是创建一个2×2的float矩阵,把后面四个三角函数值分别赋给4个元素。float B22data[] = {cos(a), -sin(a), sin(a), cos(a)};Mat B22 = Mat(2, 2, CV32F, B22data).clone();第一句创建一个普通数组B22data,第二句创建一个2×2的32bit浮点数矩阵,并使用用B22data数组里的值初始化,然后克隆一下赋给B22矩阵。为什么这
5、里还要克隆一下,不是多此一举吗?不是的,用一个数组去初始化一个矩阵的话,你会发现这个矩阵引用了数组的内存地址。不克隆的话,上面例程的后果是B22data数组、Mat(2,2...)这个临时变量矩阵、B22矩阵这三把勺子都插在同一个碗里。randu(image, Scalar(0), Scalar(256));把image弄成一个符合正太分布的随机数矩阵,rand表示random,u表示uniform;第二个参数是随机数下限,方括号哦;第三个参数是随机数上限,圆括号。randn(image, Scalar(128), Scalar(10));高斯分布的随机数矩阵;第二个参数是均值,第三个参
6、数是标差。Mat image_alias = image;没有拷贝里面的数据。float* Idata=new float[480*640*3];Mat I(480, 640, CV32FC3, Idata);第一句定义一个480×640×3×sizeof(float)字节这么大的数组;第二句创建一个矩阵I,引用的是Idata的地址。vector iptvec(10);Mat iP(iptvec); 还能和STL一起用啊,以前真不知道。第一句话创建了一个有10个Point的向量,注意Point有两个int型元素。第二句创建了一个矩阵,元素类型根据就自动设为CV_32SC2,
7、表示32bit signed int,2个channel。IplImage* oldC0 = cvCreateImage(cvSize(320,240),16,1);Mat newC = cvarrToMat(oldC0);IplImage oldC1 = newC;CvMat oldC2 = newC;这是为了把经典的OpenCV图像导成矩阵,第一句创建一个320×240的图像;第二句话把IplImage转成Mat;第三句话把Ma
此文档下载收益归作者所有