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());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值