opencv - OpenCV程序中的堆损坏

标签 opencv heap mat

我创建了一个变量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/

相关文章:

c++ - 如何从 Mat 变量编辑/读取 OpenCv 中的像素值?

c++ - 在 OpenCV 中将图像转换为彩色铅笔素描

opencv - OpenCV2.3 cv::split() 函数中的错误。所有 3 个 channel 中的值相同

visual-c++ - 我们如何消除光照噪声?

斜堆的C实现

C++堆组织——哪种数据结构?

c++ - img.at<uchar>(i,j) 是什么意思?

python - 如何在python中为linux设置复杂的环境变量?

math - 树的高度的定义是什么?

opencv - 获取帧序列的平均值