70,020
社区成员




int h = height - sw - sw, w = width - sw - sw,num= (sw * 2 + 1);
for (a = 0; a < h * w; a++) {
i = a / h + sw;
j = a % h + sw;
sum = 0;
calGaussCoef(pGaussCoef);
for (b = 0; b < num*num; b++) {
m = b / num - sw;
n = b %num- sw;
indexI = (i + m) * width + j + n;
indexG = (m + sw) * slen + n + sw;
sum += pSrcImg[indexI] * pGaussCoef[indexG];
}
pDstImg[i * width + j] = (unsigned char)(sum);
}
四层就四层,也没有什么大不了的,而且只有优化算法才能减少运算量,这种代码没有什么好优化的,你能想到的编译器早就做了。
[quote=引用 5 楼 optimistiveho 的回复:] [quote=引用 4楼ckc 的回复:]把外层可以计算的尽可能放到外层,减少在内层的运算, 比如indexI = (i+m)*width + j+n; 就可以把 (i+m)*width + j 放到一个临时变量里,在外层就计算好,这样在n循环的时候就只计算 indexl=临时变量+n 不过这个是小技巧,有些编译器也许会帮你处理过了
两层循环也叫多层?
[quote=引用 4楼ckc 的回复:]把外层可以计算的尽可能放到外层,减少在内层的运算, 比如indexI = (i+m)*width + j+n; 就可以把 (i+m)*width + j 放到一个临时变量里,在外层就计算好,这样在n循环的时候就只计算 indexl=临时变量+n 不过这个是小技巧,有些编译器也许会帮你处理过了
把外层可以计算的尽可能放到外层,减少在内层的运算, 比如indexI = (i+m)*width + j+n; 就可以把 (i+m)*width + j 放到一个临时变量里,在外层就计算好,这样在n循环的时候就只计算 indexl=临时变量+n 不过这个是小技巧,有些编译器也许会帮你处理过了
两层循环也叫多层?