opencv Mat 类型数据传递,出现访问冲突,有解决方法,但不知原因


Mat 类型数据传递

//函数功能:getDes 函数获取opencv的特征点描述符

void getDes(Mat& des)
{
	vector<float> descriptors_float(128 * num);
	//前面代码省略。后面需要将 vector里的描述符转换成Mat 类型

	Mat temp(num, 128, CV_32F);
	temp = Mat(num,128,CV_32F,descriptors_float.data(),temp.AUTO_STEP);
	//cout<<"temp.rows:"<<temp.rows<<endl;
	temp.copyTo(des);
        //cout<<temp<<endl;
}
void main()
{
	Mat descriptor;
	getDes(descriptor);
	cout<<descriptor<<endl;
}

结果在main中能正确获取到Mat。


问题:如果在getDes改为:

void getDes(Mat& des)
{
	vector<float> descriptors_float(128 * num);
	//前面代码省略。后面需要将 vector里的描述符转换成Mat 类型


	des= Mat(num,128,CV_32F,descriptors_float.data(),des.AUTO_STEP);
	//cout<<"des.rows:"<<des.rows<<endl;

        //cout<<des<<endl;
}


则在main中得不到正确的Mat,会出现错误:

.exe 中的 0x0fdcb961 处最可能的异常: 0xC0000005: 读取位置 0x02ce0040 时发生访问冲突
.exe 中的 0x0fdcb961 处有未经处理的异常: 0xC0000005: 读取位置 0x02ce0040 时发生访问冲突

目前不知原因是什么.........


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值