84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
我进行这样的操作:image_backup_.at<Vec3b>(xpos + i, ypos + j - 1)[k]就会终止程序,然后debug下发现call stack:定位到上一行image_backup_.at<Vec3b>(xpos + i, ypos + j - 1)[k]和CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);
image_backup_.at<Vec3b>(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
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的值,会变成一个较大的值。