我在txt文件中有两个灰度图像,其中一个是主图像的较小块。我已经将图像读入两个不同的2d向量矩阵。C++图像处理循环
行和图像的列是:
主:M = 768 N = 1024
SubImg:R = 49 C = 36
int R = 49; int C = 36; //Sub Image Rows/Columns
int M = 768; int N = 1024; //Main Image Rows/Columns
欲通过环主图像的宽度为49,高为36,并将每个块放入一个数组中,因此我可以将该数组与Sub图像(使用Nearest Neighbor Search)进行比较,以查看哪个块具有与Sub图像最接近的结果。
我遇到的问题是我无法获得显示所有块的循环。当我运行循环时,只会出现一定数量的程序段并且程序发生冲突。
// Testing Main 2D Vector in block format
for (int bx = 0; bx < M; bx += R)
for (int by = 0; by < N; by += C)
{
for (int x = 0; x < R; ++x)
{
for (int y = 0; y < C; ++y)
{
cout << MainIMG_2DVector[bx + x][by + y] << " ";
}
}
cout << "\n\n" << endl;
}
有人可以告诉我我做错了什么。
感谢
编辑++++++++++++++++++++++++++++++++++++++++ +
调试之后
_DEBUG_ERROR("vector subscript out of range");
_SCL_SECURE_OUT_OF_RANGE;
M = 768是不通过R = 49整除,最后循环与BX开始= 735(15 * 49)和应端部至BX = 735 + 48 = 783> 768 ...同样的问题在N = 1024和C = 36 by = 1008(28 * 36)到by = 1008 + 35 = 1043> 1024. - J. Piquard
如果我增加宽度a高度,我的主要形象舒展。有没有解决的办法?
使用正确的工具来解决这些问题是你的调试器。在*堆栈溢出问题之前,您应该逐行执行您的代码。如需更多帮助,请阅读[如何调试小程序(由Eric Lippert撰写)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您应该\编辑您的问题,以包含一个[最小,完整和可验证](http://stackoverflow.com/help/mcve)示例,该示例再现了您的问题,以及您在调试器。 –
@πάνταῥεῖ这是我得到的错误_DEBUG_ERROR(“矢量下标超出范围”); \t \t \t _SCL_SECURE_OUT_OF_RANGE; – QWERTY
因为M = 768不能被R = 49整除,最后一个循环以bx = 735(15 * 49)开始,并且应该结束为bx = 735 + 48 = 783> 768 ...在N = 1024和C = 36 by = 1008(28 * 36)to by = 1008 + 35 = 1043> 1024. –