扫码关注官方订阅号
我进行这样的操作:image_backup_.at(xpos + i, ypos + j - 1)[k]就会终止程序,然后debug下发现call stack:定位到上一行image_backup_.at(xpos + i, ypos + j - 1)[k]和CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);
image_backup_.at(xpos + i, ypos + j - 1)[k]
CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);
光阴似箭催人老,日月如移越少年。
at函数的参数是at(行,列),而不是x、y,所以产生了越界,你需要把两者换过来。 如果一定要用x、y,可以用at(cv::Point(x,y))。 另外opencv是会抛出异常的,可以用catch(std::exception e)来捕获异常查看错误信息。
at命名的函数一般有边界检查。这里的检查是通过断言实现的,即CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);。根据表达式语意,断言失败的原因是坐标越界"i>=size"。
请检查xpos + i和ypos + j - 1的值域。注:由于检查时进行了无符号转换,对于小于0的值,会变成一个较大的值。
xpos + i
ypos + j - 1
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
at函数的参数是at(行,列),而不是x、y,所以产生了越界,你需要把两者换过来。
如果一定要用x、y,可以用at(cv::Point(x,y))。
另外opencv是会抛出异常的,可以用catch(std::exception e)来捕获异常查看错误信息。
at命名的函数一般有边界检查。这里的检查是通过断言实现的,即
CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);。根据表达式语意,断言失败的原因是坐标越界"i>=size"。请检查
xpos + i和ypos + j - 1的值域。注:由于检查时进行了无符号转换,对于小于0的值,会变成一个较大的值。