0

( opencv cv :: Matをqimageに変換する方法)で提案されているコードを使用してcv::Mat、Qtアプリケーションにを表示しています。しかし、私は奇妙な結果を得ています。黒い部分は黒で表示されますが、他のすべての値は反転されます。

変換コード:

QImage ImgConvert::matToQImage(Mat_<double> src)
{
    double scale = 255.0;

    QImage dest(src.cols, src.rows, QImage::Format_ARGB32);
    for (int y = 0; y < src.rows; ++y) {
            const double *srcrow = src[y];
            QRgb *destrow = (QRgb*)dest.scanLine(y);
            for (int x = 0; x < src.cols; ++x) {
                    unsigned int color = srcrow[x] * scale;
                    destrow[x] = qRgba(color, color, color, 255);
            }
    }
    return dest;
}

表示コード:

void MainWindow::redraw()
{
    static QImage image = ImgConvert::matToQImage(im);

    static QGraphicsPixmapItem item( QPixmap::fromImage(image));
    static QGraphicsScene* scene = new QGraphicsScene;
    scene->addItem(&item);

    ui->graphicsView->setScene(scene);
    ui->graphicsView->repaint();
}

現在、私はif(color>0) color = 255-color;この効果を修正するために使用していますが、それがどこから来ているのかを理解したいと思います。

また、2番目のミニ質問:のstatic宣言を削除するredraw()と、メソッドが終了するとすぐに画像がメモリから削除されます。これはこれを修正するための最良の方法ですか?複数のフレームを表示すると、意図しない副作用が発生しますか?

4

2 に答える 2

1

知らない。私にとって最初に配列を設定することは、よりクリーンな方法のように聞こえます。https://stackoverflow.com/a/3387400/1705967を参照してください。これにより、アイデアが得られる可能性があります。

私もYpnosのソリューションを使用しており、カラー画像で大成功を収めています。:)

ああ、2番目の質問については、QPixmapについて心配する必要はありません。私が経験したように、画像データをプライベート(必要に応じてクローン)にするので、誤って上書きすることはありません。

于 2012-11-18T00:27:00.153 に答える
0

誰かがこの問題を抱えている場合、私はピクセル値を次のように引くことによってそれを素早くそして汚く修正しました256

QImage ImgConvert::matToQImage(Mat_<double> src)
{
    double scale = 255.0;

    QImage dest(src.cols, src.rows, QImage::Format_ARGB32);
    for (int y = 0; y < src.rows; ++y) {
            const double *srcrow = src[y];
            QRgb *destrow = (QRgb*)dest.scanLine(y);
            for (int x = 0; x < src.cols; ++x) {
                    unsigned int color = 256 - (srcrow[x] * scale);
                    destrow[x] = qRgba(color, color, color, 255);
            }
    }
    return dest;
}

ただし、これにより画像がわずかに破損しますが、明るさが1だけ変更されます。私の目的は視覚化することだったので、違いは目には無視できましたが、画像処理の特定のアプリケーションでは、この破損が重大な場合があります。なぜこれが起こったのかわからず、急いでいたのでそれ以上見ませんでした。

于 2013-04-26T01:41:23.797 に答える