读书人

opencv函数CVGet2D越界有关问题!

发布时间: 2012-10-05 15:34:34 作者: rapoo

opencv函数CVGet2D越界问题!!!急...
把图像中的某部分存储为新的图像,用到cvGet2D取像素值,总是出现越界的问题"One of argument values is out of range().........."
调试发现是这个函数出现问题了,但是进入函数内部又出现不了什么问题.看过很多人把参数弄反了的原因,但我的不是.
发现用循环
for(i=selection.y;i<(selection.y+pImg_face->height);i++)
for(j=selection.x;j<(selection.x+pImg_face->width);j++)

{
t=cvGet2D(img,i,j);
这样就会出问题,也就是起始坐标是图像中的某个点的时侯,而如果i=0,j=0也就是从原图像存储开始位置读像素的时候就不会出错,难道这个函数里的参数必须从0开始吗??

[解决办法]
矩阵存取函数提示越界肯定是下标问题了
在循环之前把selection.y+pImg_face->height和另外一个打印出来看看是不是超过了矩阵的宽高了
[解决办法]
单步调试一下
看看检索数据是否争取
当然主要看看循环开始和结束的位置即可
[解决办法]
越界了。
img->width是图像的宽。而 selection.x+pImg_face->width 的值有可能大于img->width。所以,发生越界也是不奇怪的。
[解决办法]
试试cvSetImageROI函数来实现你的要求

读书人网 >VC/MFC

热点推荐