cvGet2D使用的注意事项

今天在使用cvGet2D这个函数的时候“莫名其妙”报out of range 的错误,如下图所示:
这里写图片描述

很纳闷,以前用的时候从来没这样过啊?思考再三,其中的参数i在[0, img->width-1], j在[0, img->height-1], 都没超图像的范围呀?
后来去查了一下发现了这样一句话:

“对于图像中的某一像素点 P(x, y), 在我们正常的坐标系中,x代表其横坐标,y代表其纵坐标,而在opencv的函数 cvGet2D()与cvSet2D() 中,却行不通。cvGet2D() 的函数原型是 : CvScalar cvGet2D (const CvArr * arr, int idx0, int idx1); 函数返回的是一个CvScalar 容器,其参数中也有两个方向的坐标,但跟我们平常习惯的坐标不一样的是,idx0代表是的行,即高度,对应于我们平常坐标系的y, idx1代表的是列,即宽度,对应于我们平常坐标系的x,cvSet2D() 也类似。所以在使用cvSet2D() 与 cvGet2D() 时,千万要注意坐标的顺序。”

也就是说cvGet2D(img, i, j) 指的是img图像的第i行,第j列,而不是坐标(i,j)对应的像素值,于是将i、j位置调换果然可以,且结果也符合预期(以cvSetImageROI来测试的)

猜你喜欢

转载自blog.csdn.net/u013700358/article/details/53025347
今日推荐