2016-05-23 19 views
3

イメージをcvMatタイプからQimageに変換したいのですが、実際のコードではアプリケーションは動作しません。私は他の方法(QImageのが正常に動作し、それをマットに) は何がここからcvMatをQImageに

私のコードで間違った上で起こっている教えてくださいそれをやってきたマットにQImageのための私のコードです:

Mat qimage2mat(const QImage& qimage) { 
    cv::Mat mat = cv::Mat(qimage.height(), qimage.width(), CV_8UC4, (uchar*)qimage.bits(), qimage.bytesPerLine()); 
    cv::Mat mat2 = cv::Mat(mat.rows, mat.cols, CV_8UC3); 
    int from_to[] = { 0,0, 1,1, 2,2 }; 
    cv::mixChannels(&mat, 1, &mat2, 1, from_to, 3); 
    return mat2; 
} 

、ここでは、マットがスコープの外に出たとき@SpamBot言及したが、データが解放されるようQImageの

QImage mat2qimage(const Mat& mat) { 
    Mat rgb; 
    cvtColor(mat, rgb, CV_BGR2RGB); 
    return QImage((const unsigned char*)(rgb.data), rgb.cols, rgb.rows, QImage::Format_RGB888); 
} 

にマットのための私のコードは、事前

+0

'Mat rgb'が範囲外になり、関数の最後に*削除*されます。画像データをコピーするか、より長く続く 'mat'から変換してください。 – SpamBot

+0

あなたはデータをコピーする方法を教えてください – ner

+0

または、安価な解決策は、 '新しい'で 'Mat * rgb'を作成します。 – SpamBot

答えて

4

でお願いします。

QImage mat2qimage(const Mat& mat) 
{ 
    Mat rgb; 
    cvtColor(mat, rgb, CV_BGR2RGB); 
    return QImage((const unsigned char*)(rgb.data), rgb.cols, rgb.rows, QImage::Format_RGB888).copy(); 
} 
+0

それは動作しません、私は使用されたフォーマットに問題があると思います – ner

+0

任意のエラーメッセージまたはサンプル画像の人工物? – Micka

+0

このアプリケーションは異常な方法で終了させるために実行時間を要求しました – ner

関連する問題