gpt4 book ai didi

c++ - 分配 martix 元素时出现未处理的异常

转载 作者:太空宇宙 更新时间:2023-11-04 13:48:14 25 4
gpt4 key购买 nike

我有一个定义如下的图像 vector :

 vector<Mat> src;

我想将此 vector 中的每个图像作为单独的行存储在 Mat 中。所以结果 Mat 将是一个 (n*m) 矩阵,其中 n 是图像的数量,m 是图像的维度。

Mat reData;
for(int i = 0; i < src.size(); i++) {
if(src[i].empty()) {
string error_message = format("Image number %d was empty, please check your input data.", i);
CV_Error(CV_StsBadArg, error_message);
}
// Make sure data can be reshaped, throw a meaningful exception if not!
if(src[i].total() != src[0].total()) {
string error_message = format("Wrong number of elements in matrix #%d! Expected %d was %d.", i, src[0].total(), src[i].total());
CV_Error(CV_StsBadArg, error_message);
}
Mat xi;
if(src[i].isContinuous()) {
xi= src[i].reshape(1, 1);
} else {
xi= src[i].clone().reshape(1, 1);
}

for(int j=0; j< src[0].total(); j++)
{
try{
reData.at<float>(i,j)=xi.at<float>(0,j);
}
catch (cv::Exception const & e) { std::cerr<<"OpenCV exception: "<<e.what()<<std::endl; }
}
}

当运行我的代码时,运行 reData.at<float>(i,j)=xi.at<float>(0,j); 时会产生以下异常:

Unhandled exception at 0x000007f68e0d1e1d in code.exe: 0xC0000005: Access violation reading location 0x0000000001f5f000.

这个异常我做错了什么?

更新 1

我在之前的代码中定义 reData Mat 的方式是错误的。我改变了定义:

Mat reData(src.size(), src[0].total(), src[0].type());

最佳答案

Mat xi 是空的。Matr 被声明为变量,但没有给它任何内存。这会导致访问冲突。我自己做过一百次同样的事情。

创建一个矩阵。像这样的东西:

Mat xi =  Mat::ones(100, 100, CV_8U);

但是替换你自己的值。

关于c++ - 分配 martix 元素时出现未处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24789223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com