OpenCV Mat数据类型指针ptr的使用

常用形式:
mat.ptr<type>(row)[col]

对于Mat的ptr函数,返回的是<>中的模板类型指针,指向的是()中的第row行的起点
通常<>中的类型和Mat的元素类型应该一致
然后再用该指针去访问对应col列位置的元素

以下转载自:https://blog.csdn.net/github_35160620/article/details/51708659

单通道
cv::Mat image = cv::Mat(400, 600, CV_8UC1); //定义了一个Mat变量image。
uchar * data00 = image.ptr<uchar>(0); //data00是指向image第一行第一个元素的指针。
uchar * data10 = image.ptr<uchar>(1); //data10是指向image第二行第一个元素的指针。
uchar * data01 = image.ptr<uchar>(0)[1];//data01是指向image第一行第二个元素的指针。

多通道
cv::Mat image = cv::Mat(400, 600, CV_8UC3); //宽400,长600,3通道彩色图片
cv::Vec3b * data000 = image.ptr<cv::Vec3b>(0);
cv::Vec3b * data100 = image.ptr<cv::Vec3b>(1);
cv::Vec3b * data001 = image.ptr<cv::Vec3b>(0)[1];

cv::Vec3b * data

 

为什么单通道是uchar类型?

像素灰度使用一个8bit来描述,假如使用int来,那么浪费了24bits的空间.

当某个uchar像素值为255时,
二进制(1111 1111) 八进制(377) 十六进制(0xff)

当我们用int类型去访问该值时,会取32位,也就是4个uchar,:
1111 1111 1111 1111 1111 1111 1111 1111
转化为int就是 -1
usigned int 就是 4294967295
所以这样得到的输出肯定就是不对的
--------------------- 
原文:https://blog.csdn.net/w798396217/article/details/90769100 
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值