2

重複の可能性:
IplImageIPL_DEPTH_32SをQImageFormat_RGB32に変換する最速の方法

Qtで画像を表示する際に奇妙な問題に直面しています...OpenCVを使用してビデオフレームを読み取り、BGRからRGBに変換します。

video >> frameOrg;
cvtColor(frameOrg,frameOrg,CV_BGR2RGB);

次に、トリミングスタイルを使用して画像のROIを選択します。

frame = frameOrg(roi);

選択したROIをシグナル/スロット経由でウィジェットに送信paintEvent()して表示します。

image = QImage((const unsigned char*)frame.data,frame.cols,
               frame.rows,QImage::Format_RGB888);

QRectF target(0.0,0.0,image.width(),image.height());
QRectF source(0.0,0.0,image.width(),image.height());
QPainter painter(this);
painter.drawImage(target,image,source);

しかし、ROIの奇妙な値の幅と高さの組み合わせを選択すると、次のような奇妙な表示が表示されます...元の 画像

表示されたときの完全な画像

選択したROIの画像

選択したROIの画像

いくつかの変更を行う必要がありますか?Windows 7の表示に問題がありますか?ディスプレイで正しく表示されたときの同じROI imshow()...誰かが私を助けてくれます..事前に感謝します...

動作する実際のコード

image = QImage((const unsigned char*)frame.data,frame.cols,
               frame.rows,frame.step,QImage::Format_RGB888);
4

1 に答える 1

4

これはパディングの問題である可能性があります。frame変数のタイプはまだ言っていませんIPLImageが、widthStepフィールドがあります。このコンストラクターをQImageに使用します

QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )

widthStepパラメータとして渡しbytesPerLineます。

于 2013-01-24T18:13:25.307 に答える