在OpenCV程序中堆积损坏

时间:2016-05-10 04:57:11

标签: opencv heap mat

我创建了一个变量hisTotF,如

cv::Mat hisTotF=cv::Mat(1,60,CV_64FC1,Scalar(0));

我正在尝试将元素初始化为零。当我编译这个程序运行正常但是当我运行它然后在初始化数组中的第6个元素时它给出了#34;堆异常&#34;。我试图通过命令histTotF.at<double>(1,6)=0将元素初始化为零。

我的内存耗尽了吗?该程序激动了代码0xC0000374。我在Visual Studio 2012中运行OpenCV。

1 个答案:

答案 0 :(得分:1)

histTotF.at<double>(1,6) = 0;

这意味着第二行和第七列的像素。您只有一行,因此您应该使用:

histTotF.at<double>(0,6) = 0;

为了编辑第一个行和第七列的像素。在cv::Mat中,Indecies从零开始。

无论如何,使用:

构建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
}