aihot  2017-05-30 20:08:02  OpenCV |   查看评论   

 CV_IMAGE_ELEM是一个宏,

 
#define CV_IMAGE_ELEM( image, elemtype, row, col ) /
(((elemtype*)((image)->imageData + (image)->widthStep*(row)))[(col)])
 
#define CV_MAT_ELEM( mat, elemtype, row, col ) /
(*(elemtype*)CV_MAT_ELEM_PTR_FAST( mat, row, col, sizeof(elemtype)))
 
呵呵,我一直把它当一个函数用,其实本质也没有什么区别的
 
但要想正确的得到图像的坐标为(x,y)点的像素值,是应该这样写CV_IMAGE_ELEM(Image, uchar, y, x)
 
要注意像素点的坐标xy和行列值的顺序是相反的(可以仔细思考为什么)
 
我刚开始一直写成CV_IMAGE_ELEM(Image, uchar, x, y),结果有时候就造成了访问image越界,从而报错,花了好长时间才捣鼓出来,
 
不过将IMAGE的数据按照原来的样子复制到mat中可以这么写:
CV_IMAGE_ELEM(pImage, uchar, i, j) = CV_MAT_ELEM(*mat, uchar, i, j)
 
不用改变顺序
 
总之,当应用这个宏是如果老报错,就试试换个顺序,或者检查访问的地址是否越界
 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自CV_IMAGE_ELEM参数赋值时注意的问题

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]