OpenCV向MATLAB靠拢,图像的操作方法变得不那么C了,更m了一些。比如,MATLAB中的常用函数imshow、imread、imwrite函数在OpenCV中已经有了同名的兄弟。
此外,OpenCV
在doc目录里出现了一个Cheat
所以,我们来共同学习一下吧:
一、矩阵基础操作:
Mat
第一个参数是rows,该矩阵的行数;第二个参数是cols,该矩阵的列数;第三个参数是该矩阵元素的类型。这句话表示创建一个大小为240×320的矩阵,里面的元素为8位unsigned型,通道数(channel)有3个。
image.create(480,
分配(或重新分配)image矩阵,把大小设为480×640,类型设为CV8UC3。
Mat
定义并初始化一个3×3的32bit浮点数矩阵,每个元素都设为5。
Mat
B33
和上面的作用一样。
Mat
ones函数很像MATLAB里的语句吧。这句的意思是先定义一个3×3的32bit浮点数矩阵,元素全为1,所有元素再乘以5.0。
Mat
和上面类似,先定义个3×3的32bit浮点数矩阵,元素全为0,再将所有元素加上5.0;
double
Mat
CV_PI就是少年派的那个派。第二句这个写法很牛x的样子,我也没见过,不过看样子是创建一个2×2的float矩阵,把后面四个三角函数值分别赋给4个元素。
float
Mat
第一句创建一个普通数组B22data,第二句创建一个2×2的32bit浮点数矩阵,并使用用B22data数组里的值初始化,然后克隆一下赋给B22矩阵。
为什么这里还要克隆一下,不是多此一举吗?不是的,用一个数组去初始化一个矩阵的话,你会发现这个矩阵引用了数组的内存地址。不克隆的话,上面例程的后果是B22data数组、Mat(2,2...)这个临时变量矩阵、B22矩阵这三把勺子都插在同一个碗里。
randu(image,
把image弄成一个符合正太分布的随机数矩阵,rand表示random,u表示uniform;第二个参数是随机数下限,方括号哦;第三个参数是随机数上限,圆括号。
randn(image,
高斯分布的随机数矩阵;第二个参数是均值,第三个参数是标差。
Mat
没有拷贝里面的数据。
float*
Mat
第一句定义一个480×640×3×sizeof(float)字节这么大的数组;第二句创建一个矩阵I,引用的是Idata的地址。
vector
Mat
还能和STL一起用啊,以前真不知道。第一句话创建了一个有10个Point的向量,注意Point有两个int型元素。第二句创建了一个矩阵,元素类型根据就自动设为CV_32SC2,表示32bit
IplImage*
Mat
IplImage
CvMat
这是为了把经典的OpenCV图像导成矩阵,第一句创建一个320×240的图像;第二句话把IplImage转成Mat;第三句话把Mat转成IplImage;第四句把Mat转成CvMat。
Mat
转换后克隆一下赋值。
vector
把Mat又转成vector。
(转来转去真复杂对吧)
A33.at(i,j)
操作A33矩阵在row为i,col为j处的元素。需要显式指定A33里的元素类型,本例是float。
Mat
for(int
{
Vec3b*
Vec3b*
for(int
for(int
dyImage.at(y,x)[c]
}
第一句话创建一个和image大小、类型都一样的矩阵。
Vec3b是一个预定义的类型,三个无符号字符组成的向量:
typedef
saturate_cast是一个强制类型转换,把圆括号里的东西转换为尖括号里的类型。
for循环里的语句是把矩阵dyImage里的元素都赋值为后一行的值减去前一行的值,注意这个矩阵里的值是个具有三个元素的向量,理解为数组就行了,所以用方括号访问。
Mat::iterator
for(;
(*it)[1]
用过STL里的迭代器吗?用过的话就不解释了,没用过的还是先看看STL吧。
对image每个值(Vec3b向量)的第一个元素和0xFF做异或。
sume
2012.12.25
OpenCV2.4.3 CheatSheet学习(一)
最新推荐文章于 2022-11-04 00:02:08 发布