( 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()
と、メソッドが終了するとすぐに画像がメモリから削除されます。これはこれを修正するための最良の方法ですか?複数のフレームを表示すると、意図しない副作用が発生しますか?