我有一个2D图像,表示为线性数组,如果我知道行数和列数,我可以访问像素值。
所以,假设我有一个列主数组,我可以得到像素值:
// image is an unsigned char array
unsigned char getValue(int row, int col)
{
// Skipping the checks
return image[row * NumCols + col];
}
现在,我想迭代这个数组的子数组,只要我知道行和列偏移量,这也很简单。
unsigned char getValue(int row, int col, int offsetRow, int offsetCol)
{
int index = (row + rowOffset) * NumCols + offsetCol + col;
return image[index];
}
现在,我想迭代一个未与数组轴对齐的子数组,即将其视为原始数组中的旋转子数组。所以,我可以访问这个数组的4个角的位置。为这个旋转的数组创建迭代器的有效方法是什么?
我猜我需要计算四个边界的斜率,并根据我需要检查一个像素是否在这个边界内。我能想到的另一种方法是计算一个边界框掩码,它可以判断一个像素是否在子数组中,并迭代它。
我想知道是否有更有效的方式来做这样的事情,特别是使用一些STL魔术。