浅谈opencv中的Mat在处理图像数据中的用法

当下人们都在谈机器学习,深度学习,人工智能,大数据,机器视觉,而这些都离不开一些主要的算法,opencv就是这么一个可以应用到工业界的优秀算法实现的库(当然搞算法的第一选择还是matlab工具)。

在mat.hpp文件里有Mat类的定义,在此之前有一大段的注释,就是对该Mat类的用法的最好理解。花点时间研读一下,大有裨益。

Mat类的实现挺复杂但也强大,是使用opencv必须了解的一个重要的类。

n-dimensional dense array class

一个n维的稠密数组类

The class Mat represents an n-dimensional dense numerical single-channel or multi-channel array. It
can be used to store real or complex-valued vectors and matrices, grayscale or color images, voxel
volumes, vector fields, point clouds, tensors, histograms (though, very high-dimensional histograms
may be better stored in a SparseMat ). 

Mat这个类代表了一个n维稠密的数值的单通道或多通道的数组。它能被用于存储实数(或复数)数值的向量和矩阵,灰度(或彩色)图像,体素容量,向量场,点云,张量,直方图(尽管很高维的直方图可能最好存放在稀疏矩阵里)。


下面结合一个例子,说明如何对图像数据进行访问。

Mat T = imread("test.png", IMREAD_COLOR);
cout << T.type() <<  endl;

打印出该图像数据矩阵的类型,比如这里是CV_8UC3表明有3个通道(通常是BGR顺序),每个通道是8位无符号数即unsigned char

在opencv的Mat里,图像数据矩阵中的数据与实际看到的图像的数据是一样的摆放,即都是正的。如何取得某一位置比如i行,j列处的像素数据?

需要用到Vec3b即Vec<uchar, 3>类型
Vec<uchar, 3> pixel = T.at<Vec<unsigned char, 3>>(i,j);
cout << pixel << endl;

这就打印出了图像i行,j列处的像素值。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值