在opencv编程中遇到了这样一个问题,错误提示显示:
opencv Error: Assertion failed <dims <=2 && data && <unsigned >i0 < <unsigned>size.p[0]......
后边还有好长,具体见下图
===============================分割线==============================
出错说明
出错的地方位于opencv内部的“断言”错误。看相关代码,是你在调用opencv相关函数的时候参数不符合规则。
也就是说,你在访问某个Mat矩阵时越界了,所以报错。
===============================分割线==============================
解决办法
经排查,发现自己在访问图像像素时,将行、列顺序写反,导致错误出现。
错误前代码(仅展示出错部分)
//统计灰度级中每个像素在整幅图像中的个数
for (int i = 0; i < nCols; i++)
{
for (int j = 0; j < nRows; j++)
{
nSumPix[(int)grayImage.at<uchar>(i, j)]++;
}
}
参数解释:nCols——列数。 nRows——行数。
改后代码
就是将nCols与nRows的位置调换。
for (int i = 0; i < nRows; i++)
{
for (int j = 0; j < nCols; j++)
{
nSumPix[(int)grayImage.at<uchar>(i, j)]++;
}
}
在我的程序里这个错误问题就这样的解决了。
===============================分割线==============================
最后要说的是,访问图像的像素时,一定要先行、再列的循环访问,次序不能换!!!
=============================END============================