指针遍历图像 why指针类型uchar?

uchar与char

char 是有符号的 unsigned char 是无符号的,里面全是正数 两者都作为字符用的话是没有区别的,但当整数用时有区别: char 整数范围为-128到127( 0x80__0x7F), 而unsigned char 整数范围为0到255( 0__0xFF ) 有时候想把整数数值限在255范围内,也用unsigned char、。

widthstep是指图像每行所占的字节数。

 


主要要和width区别:
width是表示图像的每行像素数,widthStep指表示存储一行像素需要的字节数。
在OpenCV里边,widthStep必须是4的倍数,从而实现字节对齐,有利于提高运算速度。
如果8U单通道图像宽度为3,那么widthStep是4,加一个字节补齐。这个图像的一行需要4个字节,
只使用前3个,最后一个空着。也就是一个宽3高3的图像的imageData数据大小为4*3=12字节。



imagedata是指向存储图像像素值数组的指针,内容是这个数组的首地址,pt.y指的是像素点的行坐标,
所以Img->imageData + Img->widthStep*pt.y便是该像素点所在行的首地址,然后再加上该像素点所在的列,即pt.x,
就得到了该像素点的地址,代码也可以写成

((uchar*)(Img1->imageData + Img1->widthStep*pt.y+pt.x)),都是指该像素点的像素值
posted @ 2019-03-08 19:59  西牛皮  阅读(328)  评论(0编辑  收藏  举报