OpenCV step[0] step[1] elemsize elemsize1

假设有个Mat a(4,3,CV_8UC3),也就是有4行,3列,3通道,数据类型是8位无符号数。在保存的时候就是用3维数组表示,即[[b,g,r,],[b,g,r],...,[b,g,r]],bgr代表一个8位无符号的数值。形象点写就是

[[[b,g,r],[b,g,r],[b,g,r]],
 [[b,g,r],[b,g,r],[b,g,r]],
 [[b,g,r],[b,g,r],[b,g,r]],
 [[b,g,r],[b,g,r],[b,g,r]]]

elemSize()

一个位置所有通道的元素的字节数。也就是一个[b,g,r]的字节数,为3

elemSize1()

一个位置一个通道的元素字节数,也就是一个b/g/r的字节数,为1。
也就是说,elemSize()=elemSize1()*channels()

step

step是一个数组,保存了各个维度的的字节数。
例子中是2维矩阵,step[0]保存第一维的大小。第一个维度是行,也就是褪去最外层括号后,最大的元素的字节数为9.
step[1]保存第二个维度元素的大小。第二个维度是每行再向下分,去掉第二层括号后,最大的元素的字节数,也就是是3.
elemSize()和step[dims-1]是相等的

附上RGB三色值的获取方法

#define addrB(mat,i,j) (mat.data + mat.step[0] * i + mat.step[1] * j + mat.elemSize1() * 0)
#define addrG(mat,i,j) (mat.data + mat.step[0] * i + mat.step[1] * j + mat.elemSize1() * 1)
#define addrR(mat,i,j) (mat.data + mat.step[0] * i + mat.step[1] * j + mat.elemSize1() * 2)

Mat a(3,4,CV_8UC3)
*addrB(a,1,1)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值