OpenCV_(1):Mat结构的应用

Mat类是OpenCV的C++接口的图像存储类,不必像C接口的IplImage那样要创建释放内存,不用担心内存释放问题,上手快。

Mat类由两部分组成:矩阵头(矩阵尺寸,存储方法,存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法的不同,矩阵可以是不同的维数)的指针。因为大图像的复制会降低程序的运行速度,为了解决这个问题,引入计数机制。思路是让每个Mat对象有自己的信息头,但共享同一个矩阵,让图像矩阵指向同一指针即可。

Mat A,C;
A = imread("1.jpg",CV_LOAD_IMAGE_COLOR);//这里为矩阵开辟内存
Mat b(A);//使用拷贝构造函数
C = A;

代码中所有Mat对象都指向同一个数据矩阵。

要想建一个感兴趣区域,只需要包括边界信息的信息头:

Mat D(A,Rect(10,10,100,100)); //使用矩形界定
Mat E = A(Range:all(),Range(1,3)); //使用行和列来界定

真想赋值矩阵就copyTo或者clone()。

Mat F = A.clone();
Mat G;
A.copyTo(G);

在存储图像的时候,颜色系统是要设置的。
RGB:红绿蓝
HSV和HLS把颜色分为色调、饱和度和亮度/明度,这种最后一个元素不用的话,使算法对输入图像的光照条件不敏感。
YCrCb即YUV,亮度和色度,这是PAL制式的,电视机颜色空间。
CIE Lab亮度加四个颜色,是感知上均匀的颜色空间,适合用来度量两个颜色之间的距离。

图像元素数据类型:char占一个字节或8位,可以是无符号型(0与255之间)或有符号型(-127到+127)。三个char型元素已经可以表示1600万种可能的颜色。 int:16位;float:4字节,32位;double:8字节,64字节。

显式创建Mat对象的七种方法:

1:Mat M(2,2,CV_8UC3,Scalar(0,0,255));
2:int sz[3] = {2,2,2};
     Mat L(3,sz,CV_8UC,Scalar::all(0));
3:IplImage* img = cvLoadImage("1.jpg",1);
     Mat mtx(img); //转换IplImage*->Mat
4: M.create(4,4,CV_8UC(2));
5: Mat E = Mat::eye(4,4,CV_64F);
   Mat O = Mat::ones(2,2,CV_32F);
   Mat z = Mat::zeros(3,3,cv_8UC1);
6: Mat C = (Mat_<double>(3,3) << 0,-1,0,-1,5,-1,0,-1,0);
7: Mat RowClone = C.row(1).clone();

数据元素可以通过randu()函数产生的随机数填充矩阵。

OpenCV的格式化输出风格

cout <<"r(OpenCV默认风格) = " << r << "," << endl <<endl;
别的风格就是把r改成format(r,"python") 或者csv,numpy,C等风格。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值