我创建了一个类似的变量hisTotF
cv::Mat hisTotF=cv::Mat(1,60,CV_64FC1,Scalar(0));
我正在尝试将元素初始化为零。当我编译这个程序时,它运行得很好,但当我运行它时,在初始化数组中的第六个元素时,它会给出一个"堆异常"。我正试图通过命令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
}