opencv中这句话uchar* ptr = (uchar*)(pFrImg->imageData + x * pFrImg->widthStep);是什么意思?
答案:2 悬赏:60
解决时间 2021-03-06 06:45
- 提问者网友:斯文败类
- 2021-03-05 05:51
opencv中这句话uchar* ptr = (uchar*)(pFrImg->imageData + x * pFrImg->widthStep);是什么意思?
最佳答案
- 二级知识专家网友:山鬼偶尔也合群
- 2021-03-05 07:07
pFrImg->imageData应该是指向一片数据区的地址,
+ x*pFrImg->widthStep,就是从地址向后移动 x * pFrImg->widthStep 个单元,每个单元的大小要看imageData的指针类型
最后把移动后的地址强制转换成uchar*
+ x*pFrImg->widthStep,就是从地址向后移动 x * pFrImg->widthStep 个单元,每个单元的大小要看imageData的指针类型
最后把移动后的地址强制转换成uchar*
全部回答
- 1楼网友:抱不住太阳的深海
- 2021-03-05 07:41
你应该是刚学opncv吧,widthstep是指图像每行所占的字节数,主要要和width区别,width是指每行所含的像素个数,但是一个像素也可能占一个字节,也可能占三个字节或者四个。imagedata是指向存储图像像素值数组的指针,内容是这个数组的首地址,pt.y指的是像素点的行坐标,所以img->imagedata + img->widthstep*pt.y便是该像素点所在行的首地址,然后再加上该像素点所在的列,即pt.x,就得到了该像素点的地址,所以你的那句代码也可以写成
((uchar*)(img1->imagedata + img1->widthstep*pt.y+pt.x)),都是指该像素点的像素值,至于强制类型转换,是因为会产生一些负值,而像素值是不能为负的。不用加分,希望能帮到你。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯