我正在尝试扫描灰度图像,并使用OpenCV确定该图像中每个像素的值。我正在实现double for循环,逐行遍历每个列。然后,我尝试使用OpenCV的.at()函数在每次迭代时读取像素值。下面是我当前的代码。

unsigned int column;
unsigned int row;
int pixel_value;
int img_height = image.rows;
int img_width = image.cols;

for (row = 0; row <= img_height; row++)
{
    for (column = 0; column <= img_width; column++)
    }
        pixel_value = grey_image.at<uchar>(row, column);
    }
}

当我运行此代码时,出现以下错误:



此错误发生在OpenCV的mat.inl.hpp文件中的第1107行。在调试过程中,我逐步执行了代码,并弄清楚了内部for循环完全运行。但是在发生这种情况之后,当外部for循环再次运行(发生异常)时,row就会增加。

我曾尝试查找功能.at的文档,但看不到任何错误。我还尝试查找其他方法来执行此操作,例如使用MatIterator_和带指针的double for循环配置(我对指针不自信,我需要练习它们,显然,如果使用指针,则必须进行更多检查才能完成操作确保您正在通过https://docs.opencv.org/2.4/doc/tutorials/core/how_to_scan_images/how_to_scan_images.html教程传递正确数量的uchar字段并跳过空白???,这是什么意思?)。我也尝试查找有关这些文件的文档,但是我对它们的工作方式仍然感到困惑。

我将不胜感激,谢谢您的宝贵时间。

最佳答案

首先将看起来:

int img_height = image.rows;
int img_width = image.cols;

与尺寸不同
grey_image

因此,请尝试将其更改:
int img_height = grey_image.rows;
int img_width = grey_image.cols;

关于c++ - 在c++中使用.at()使用OpenCV扫描图像的异常未处理错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51022885/

10-11 22:42
查看更多