opencv里的at函数

坑人的Mat

先生可曾为Mat写了一点什么没有?”我说“没有”。他就正告我,“先生还是写一点罢;如果不写,下次它可能还是会坑你“

所以我就写了这篇,以后还可能有。

Mat是什么

Mat是opencv库里的一个数据结构,作为计算机视觉领域重要的库,opencv里有很多强大的东西,用起来也很方便,但是作为其中最基础的数据结构,Mat这个东西确实令人迷惑,今天就把其中一些比较令人困惑的点简单总结下。

存储方式

Mat就是个矩阵模板,它的类型参数用一系列常数来表示了,例如常常可以看到的CV_8UC3这样的东西。所以它可以用来存储图像,单通道,多通道,或者你只想用它放一个矩阵,都可以。

但是opencv并没有Mat< double >这种东西,那怎么往里放一个想要的数据大小呢?

其实上面提到的那个代表类型的常数告诉了你答案:如CV_8UC3,第一个8代表位数,如果是32S或者64F之类的就是32位或64位,这里U可以看成uchar,如果是double,就是64位,类推之。

后面那个3或者整个C3代表的是通道数,这里3通道这个词不需要抽象的理解,就是RGB,或者3维向量,就是这么简单,如果想在一个位置就存一个数,那就C1好了。

at

说回到at,理解了上面的东西以后,at的大部分错误就清楚了——at是一个函数模板,你必须要把at的类型跟Mat的类型一样才行,因为它很坑的一点就是不去管Mat是什么类型的,或者它不会很自动的完成这一点,你必须自己知道Mat是什么类型,然后告诉它。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值