我遇到了翻转问题,因为只显示了正确的部分,图片的其余部分只是灰色。
![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 );
答案 0 :(得分:1)
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);
答案 1 :(得分:0)
您需要执行两个像素的完全交换,而不是仅覆盖该值 - 灰色来自此行:
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);
}
}
答案 2 :(得分:0)
你在这些方面做了什么:
Image::PixelType pix = im2->GetPixel(x,y);
im2->SetPixel(x,y,sizeX-x-1);
im2->SetPixel(sizeX-x-1,y,pix);
您应该记住两个像素值,然后交换它们。将像素设置为sizeX - x - 1
的想法是什么?