寻找用于图像处理的最快算法(在C中实现)

时间:2012-01-26 16:43:36

标签: c algorithm image

我有一个方形矩阵(n * n)的字符,我想翻转图像。

我希望在最快的时间内完成这项工作(暂时不要介意公羊)。

显而易见的选择是逐行复制矩阵,但我认为有更好的方法。 想法?

4 个答案:

答案 0 :(得分:4)

垂直翻转很容易快速:只需分配一个额外的临时线,并使用memcpy在图像/矩阵的顶部和底部之间一次交换整行。

除非你想编写汇编,否则水平翻转很难加速,最佳解决方案将依赖于cpu。

答案 1 :(得分:2)

解决方案1 ​​ - 交换指针

根据数据的表示形式(并假设每个字符代表一个“像素”_,它可能只是通过交换指针来完成。例如,如果定义为:

char *matrix[N]; 

然后动态分配每个“行”(或“列”,具体取决于定义),您可以交换指针。这样做(但是在一个循环中...我只是展示了单个交换的想法):

char* tmp = matrix[0];
matrix[0] = matrix[N-1];
matrix[N-1] = tmp;

根据布局,表示可以是行或列。

解决方案2 - 不要移动/交换任何东西

根据数据的呈现方式,最快的方法可能根本不是翻转数据。只需以不同的顺序显示它。例如,而不是:

for ( r = 0; r < N; r++ )
   for ( c = 0; c < N; c++ )
      displayMe( r, c, matrix[r][c] );

这样做(或类似的事情):

for ( r = 0; r < N; r++ )
   for ( c = 0; c < N; c++ )
      displayMe( r, c, matrix[N - r - 1][c] );

答案 2 :(得分:0)

如果您实际需要的是矩阵转置(旋转90度),请查看Transpose a 2D array

答案 3 :(得分:0)

如果您要遍历所有矩阵,强烈建议使用一维数组来表示矩阵,因为嵌套的fors非常昂贵。