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 时发生访问冲突
目前不知原因是什么.........