翻转图像水平C

Flipping Image horizontally C++

本文关键字:水平 图像 翻转      更新时间:2023-10-16

我对翻转有问题,因为仅显示正确的部分,其余的图片只是灰色。

![Lena FLipped][1]    
Image *im2 = new Image();
im2->CloneImage(image);
unsigned int sizeX = im2->GetSizeX();
unsigned int sizeY = im2->GetSizeY();
for(int x = 0; x < sizeX/2;x++){
   for(int y = 0;y < sizeY;y++ ){
       Image::PixelType pix = im2->GetPixel(x,y);
       im2->SetPixel(x,y,sizeX-x-1);
       im2->SetPixel(sizeX-x-1,y,pix);
   }
}
ImageIO::Write( "flip.pgm", im2 );
im2->SetPixel(x,y,sizeX-x-1);

是错误的,您需要设置颜色:

Image::PixelType pix1 = im2->GetPixel(x,y);
Image::PixelType pix2 = im2->GetPixel(sizeX-x-1,y);
im2->SetPixel(x,y,pix2);
im2->SetPixel(sizeX-x-1,y,pix1);

您在这些行中做什么:

   Image::PixelType pix = im2->GetPixel(x,y);
   im2->SetPixel(x,y,sizeX-x-1);
   im2->SetPixel(sizeX-x-1,y,pix);

您应该记住两个像素值,然后交换它们。将像素设置为sizeX - x - 1的想法是什么?

您需要执行两个像素的完整交换,而不仅仅是覆盖值 - 灰色来自这一行:

im2->SetPixel(x,y,sizeX-x-1);

在哪里提供两个X坐标,没有像素值。更正的循环:

for(int x = 0; x < sizeX/2;x++){
   for(int y = 0;y < sizeY;y++ ){
       Image::PixelType pix = im2->GetPixel(x,y);
       im2->SetPixel(x,y,im2->GetPixel(sizeX-x-1,y));
       im2->SetPixel(sizeX-x-1,y,pix);
   }
}