我正在尝试扫描灰度图像,并使用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);
}
}
运行此代码时出现此错误:
A2V2.exe中0x00007FFFD9D9A388处未处理的异常:Microsoft C ++异常:内存位置0x000000EB54EFEFD0处的cv :: Exception。
此错误发生在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 字段并跳过了空白?这是什么意思?)。我也尝试查找有关这些文件的文档,但是我对它们的工作方式仍然感到困惑。
感谢您的帮助。
答案 0 :(得分:1)
首先将<=替换为<,因为数组从0开始,如果不起作用,则 似乎:
int img_height = image.rows;
int img_width = image.cols;
没有和
相同的尺寸grey_image
所以请尝试将其更改:
int img_height = grey_image.rows;
int img_width = grey_image.cols;