我创建了一个变量hisTotF
cv::Mat hisTotF=cv::Mat(1,60,CV_64FC1,Scalar(0));
我正在尝试将元素初始化为零。当我编译该程序时,它运行良好,但是当我运行它时,则在初始化数组中的第6个元素时会给出“堆异常”。我正在尝试通过
histTotF.at<double>(1,6)=0
命令将元素初始化为零。我的内存不足了吗?该程序的代码为
0xC0000374
。我在Visual Studio 2012中运行OpenCV。
最佳答案
histTotF.at<double>(1,6) = 0;
这意味着位于第二行和第七列的像素。您只有一行,因此您应该使用:
histTotF.at<double>(0,6) = 0;
为了编辑第一行和第七列的像素。索引在
cv::Mat
中从零开始。无论如何,使用以下命令构造
cv::Mat
:cv::Mat hisTotF=cv::Mat(1,60,CV_64FC1,Scalar(0));
足以使其全部为零。
如果要遍历一行中的所有像素并以快速方式更改其值,则可以使用
cv::Mat::ptr
:auto row_ptr = hisToF.ptr<double>(0); //Pointer to the first row.
for(size_t col_idx=0; col_idx<hisToF.cols; ++hisToF.cols){
row_ptr[col_idx]= 0; // Or whatever value you want
}
关于opencv - OpenCV程序中的堆损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37129574/