3

カラー画像を白黒画像に変換する簡単なプログラムを作成しようとしています。

これまでのところ、私はこれを作っています。

void ObradaSlike::convert_picture_to_bw()
{
    QImage image;
    image.load(fileModel->fileInfo(listView->currentIndex()).absoluteFilePath());

    QSize sizeImage = image.size();
    int width = sizeImage.width(), height = sizeImage.height();

    QRgb color;
    int value;

    for (int f1=0; f1<width; f1++) {
        for (int f2=0; f2<height; f2++) {
            color = image.pixel(f1, f2);
            image.setPixel(f1, f2, QColor((qRed(color) + qGreen(color) + qBlue(color))/3).rgb());
        }
    }
    sceneGraphics->clear();
    sceneGraphics->addPixmap(QPixmap::fromImage(image));
}

コードは機能するはずですが、問題があります。

このコードの問題は、常に青黒の画像が白黒の画像に挿入されることです。これを修正する方法を知っていますか。

ありがとう。

4

1 に答える 1

8

代わりにこれを試してください:

int gray = qGray(color);
image.setPixel(f1, f2, qRgb(gray, gray, gray));

qGray()実際には、式 を使用して光度を計算することに注意してください(r*11 + g*16 + b*5)/32

あなたが今やろうとしているように、通常の平均を取得したい場合:

int gray = (qRed(color) + qGreen(color) + qBlue(color))/3;
image.setPixel(f1, f2, qRgb(gray, gray, gray));
于 2013-01-03T17:43:00.517 に答える