C++ 如何在使用Qt缩放图像/图片时减少噪声

C++ 如何在使用Qt缩放图像/图片时减少噪声,c++,image,qt,graph-algorithm,C++,Image,Qt,Graph Algorithm,我使用的代码如下所示: void MyLabel::paintEvent(QPaintEvent *event){ QPainter painters(this); /*对img进行平滑缩放*/ int image_width,image_height; image_width = width(); image_height = height(); QImage result = img.scaled(image_width<<

我使用的代码如下所示:

void MyLabel::paintEvent(QPaintEvent *event){
    QPainter painters(this);
    /*对img进行平滑缩放*/
     int image_width,image_height;
     image_width = width();
     image_height = height();
     QImage result = img.scaled(image_width<<2,
         image_height<<2).scaled(image_width,
                image_height,Qt::IgnoreAspectRatio,Qt::SmoothTransformation
                );
    painters.drawPixmap(0,0,image_width,image_height,QPixmap::fromImage(img));
    }
void MyLabel::paintEvent(QPaintEvent*event){
Q油漆工(本);
/*对img进行平滑缩放*/
int图像宽度、图像高度;
图像宽度=宽度();
图像高度=高度();

QImage result=img.scaled(图像宽度我怀疑这是因为您调用了两次
QImage::scaled()
,第一次是向上缩放到所需大小的4倍,第二次是实际所需大小。第一次调用使用转换模式的默认值(即
Qt::FastTransformation
)。因此,本质上是将非平滑变换与平滑变换相结合。请注意,第一个变换无论如何都是不必要的。只需使用
Qt::SmoothTransformation
立即缩放到所需大小即可

QImage result = img.scaled(image_width, image_height,
                           Qt::IgnoreAspectRatio,
                           Qt::SmoothTransformation);
编辑:刚刚注意到一些其他内容。请查看您的
drawPixmap
行:

painters.drawPixmap(0,0,image_width,image_height,QPixmap::fromImage(img));
当您打算绘制结果时,您正在绘制原始的
img

painters.drawPixmap(0,0,image_width,image_height,QPixmap::fromImage(result));

是的,太多了,我只是再次修改了我的代码,但这并没有什么改善,就像图片1一样。所以我认为这不是重点!但我现在有另一个问题?你能帮我吗?这只是一个巨大的地图,10000*2000,我怎么能显示在我的标签上?我尝试了很长时间,但它不起作用。不幸的是,我对Qt不太熟悉。但是有很多教程可以帮助你。如果你在那里找不到任何东西,我建议你单独问一个问题。