图像翻转不正确...为什么?

时间:2013-12-10 15:39:03

标签: c image struct flip

我试图在Y轴上翻转我的图像,它确实翻转,但它在中间和右侧留下奇怪的空间,它不会完美地翻转整个图像,我将图像限制为450 450和P3 ......任何人都有任何想法,因为我的算法是正确的

for(j=0; j < imgur.width/2; j++)
  {
     for(i=0; i < imgur.height; i++)
        {
           temp.red = imgur.image[i][j].red;
           imgur.image[i][j].red = imgur.image[i][imgur.height-j-1].red;
           imgur.image[i][imgur.height-j-1].red = temp.red;

           temp.green = imgur.image[i][j].green;
           imgur.image[i][j].green = imgur.image[i][imgur.height-j-1].green;
           imgur.image[i][imgur.height-j-1].green = temp.green;

           temp.blue = imgur.image[i][j].blue;
           imgur.image[i][j].blue = imgur.image[i][imgur.height-j-1].blue;
           imgur.image[i][imgur.height-j-1].blue = temp.blue;
     }
  }

这是我的算法...在此之前我打印出P3,注释,宽度和高度以及maxColor。我使用两个结构来获取数据并从终端读取文件... 这是我打印数据的方式。有人有主意吗?

 for(i=imgur.height-1; i >= 0; i--)
  {
     for(j=0; j < imgur.width; j++)
        {
           printf("%i\n", imgur.image[i][j].red);
           printf("%i\n", imgur.image[i][j].green);
           printf("%i\n", imgur.image[i][j].blue);
        }
  }

2 个答案:

答案 0 :(得分:1)

我的对称探测器被(在上半部分)混淆了

for(j=0; j < imgur.width/2; j++) {
  for(i=0; i < imgur.height; i++) {

和(在下半部分)

for(i=imgur.height-1; i >= 0; i--) {
  for(j=0; j < imgur.width; j++) {

答案 1 :(得分:1)

你在翻转算法中犯了一个小错字:当你颠倒翻转时,你必须完全扫描所有线条和图像高度的一半,而不是相反。

for(j=0; j < imgur.width; j++)
{
  for(i=0; i < imgur.height/2; i++)
  {
     //code of your loop, removed for compactness
  }
}

修改 实际上,对于左右交换,您还反转了索引j的补码。 j位于X轴上,属于范围0:width-1,因此补码为width-1-j

很久以前我编写了这个算法的版本,就像那样:

for (i=0; i!=h; i++) {
    for (j=0; j!=w/2; j++) {
        temp = src[i][w-1-j];
        dst[i][w-1-j] = src[i][j];
        dst[i][j] = temp;
    }
}

我认为它工作正常(当您使用像素结构时,像这样交换整个像素是完全正确的。)