我正在尝试理解以下代码:
void stencil(const int nx, const int ny, const int width, const int height,
double* image, double* tmp_image)
{
for (int j = 1; j < ny + 1; ++j) {
for (int i = 1; i < nx + 1; ++i) {
tmp_image[j + i * height] = image[j + i * height] * 3.0 / 5.0;
tmp_image[j + i * height] += image[j + (i - 1) * height] * 0.5 / 5.0;
tmp_image[j + i * height] += image[j + (i + 1) * height] * 0.5 / 5.0;
tmp_image[j + i * height] += image[j - 1 + i * height] * 0.5 / 5.0;
tmp_image[j + i * height] += image[j + 1 + i * height] * 0.5 / 5.0;
}
}
}
一维数组符号非常令人困惑。我正在尝试将其转换为2D表示法(我觉得更容易阅读)。有人能为我指出正确的方向吗?
答案 0 :(得分:0)
这些代码所做的全部工作就是从原始图像中创建新图像,方法是从相应像素中获取60%,从每个相邻像素中获取10%。
看到tmp_image[j + i * height]
时,将其读为tmp_image[i][j]
。
更改代码以按实际使用2D语法可能需要在编译时至少了解一个维度,而现在它是一个运行时参数。因此,除非您正在使用C ++并想编写或使用矩阵类而不是普通数组,否则这可能是一个入门。