欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

OpenCV学习笔记-关于使用Mat.at(i,j) = int 语法报错

发布时间:2023/12/20 49 豆豆
生活随笔 收集整理的这篇文章主要介绍了 OpenCV学习笔记-关于使用Mat.at(i,j) = int 语法报错 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

关于使用Mat.at(i,j) = int 语法报错,内存异常的原因。

首先是查看异常如何发生的,单步调试可以发现再at方法里有以下断言:

_Tp& Mat::at(int i0, int i1) {CV_DbgAssert(dims <= 2);CV_DbgAssert(data);CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);CV_DbgAssert((unsigned)(i1 * DataType<_Tp>::channels) < (unsigned)(size.p[1] * channels()));CV_DbgAssert(CV_ELEM_SIZE1(traits::Depth<_Tp>::value) == elemSize1());return ((_Tp*)(data + step.p[0] * i0))[i1]; }

其中断言2要求这个Mat必须是有数据填充的,不能是空的。我一开始使用如下方法定义了一个空的Mat.

Mat mat; mat.create(mat_a.size(),mat_a.type());

创建了一个指定大小和数据类型的空Mat,所以在调用at方法时报错。

改变,创建一个以0填充的Mat结构就可以了。

Mat mat = Mat::zeros(mat_a.size(),mat_a.type());

总结

以上是生活随笔为你收集整理的OpenCV学习笔记-关于使用Mat.at(i,j) = int 语法报错的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。