我对图像的子区域做了很多操作。例如,如果我有一个 100x100 的图像,我可能想要迭代这个图像并处理 10x10 像素的块。例如:
for(each 10x10 block)
{
for(each pixel in the block)
{
do something
}
}
这样做的问题是小块不是连续的内存块(即图像像素按行主要顺序存储,所以当我访问 10x10 块时,块的每一行中的像素是连续的,但是块不是连续的。有什么办法可以加快对这些块中像素的访问速度?还是无法快速访问这样的数据结构区域?
从我所做的大量阅读中,听起来像是首先读取像素,因为循环中的唯一操作可能很有用:
// First read the pixels
vector<float> vals(numPixels);
for(pixels in first row)
{
val[i] = pixels[i];
}
// Then do the operations on the pixels
for(elements of vals)
{
doSomething(vals[i])
}
与我正在做的事情相比,两者同时只是:
// Read and operate on the pixels
for(pixels in first row)
{
doSomething(pixels[i])
}
但我找不到任何实际的代码示例(相对于理论解释)如何做到这一点。有没有道理呢?