【发布时间】:2016-07-30 01:08:53
【问题描述】:
以下代码是边缘检测程序的一部分:
void detect_optimized(int width, int height, int threshold)
{
int x, y;
int tmp;`
int w = width--;
int h = height--;
for (y = 1; y < w; y++)
for (x = 1; x < h; x++)
{
tmp = mask_product(mask,a,x,y,0);
if (tmp>255)
tmp = 255;
if (tmp<threshold)
tmp = 0;
c[x][y][0] = 255-tmp;
tmp = mask_product(mask,a,x,y,1);
if (tmp>255)
tmp = 255;
if (tmp<threshold)
tmp = 0;
c[x][y][1] = 255-tmp;
tmp = mask_product(mask,a,x,y,2);
if (tmp>255)
tmp = 255;
if (tmp<threshold)
tmp = 0;
c[x][y][2] = 255-tmp;
}
}
我一直在尝试使用以下代码实现阻塞,但我不确定在这种情况下如何使用它。
【问题讨论】:
-
非常小,但您可以在每对中使用
else if作为第二个if。 -
我假设
threshold应该始终小于 255。 -
为什么
int w = width--;然后没有进一步使用width所以没有减少点?使用width和height作为循环限制变量,去掉w和h,如for (y = 1; y < width; y++),效率低。您还可以通过将特殊情况直接写入数组(而不是做减法)来获得一些效率,然后是else。 -
byte c[MAX_ROW][MAX_COL][NUM_COLORS]; -
奇怪地类似于this recent question
标签: c loops optimization