2017-11-03 11 views
0

CV ::マットから変換された画像上のセグメントの障害を与え、それがこのようなものです:プログラムはちょうど私が多くの画像を試してみた...任意のデバッグログなしでクラッシュしたがQPixmapのfromImageは、私は、コードを簡略化し

Mat mat = imread("xxx.jpg"); //Successfully read the image, confirmed by cvShowImage. 

if (mat.empty()) 
{ 
    qDebug() << "Couldn't load image"; 
    return; 
} 

Mat cpy = mat.clone(); 
cvtColor(mat,cpy,CV_BGR2RGB); 
QImage image(cpy.data, cpy.cols, cpy.rows, cpy.step, QImage::Format_RGB888); 

try { 
    pm = QPixmap::fromImage(image); //crash line 
} catch(std::exception const &ex){ 
    qDebug()<<ex.what(); 
} 

その結果は同じです。私は、「スタックトレース」を見つけることを試み、この上でセグメンテーションフォルトを与えるようです。..

enter image description here

+2

まず、 'QImage image(...);'を実行し、 'pm = QPixmap :: fromImage(fim);'を実行します。 'fim'とは何ですか? (クラッシュの理由は?)これを[MCVE](http://stackoverflow.com/help/mcve)にすることを暖かく勧めます。これで問題が解決しない場合は、少なくともこのコミュニティでより多くの注目を集めるのに役立ちます。 – Scheff

+0

私はfimがいくつかのユニット化されたデータを保持していると推測しています –

+0

@Scheffああ申し訳ありません。別の機能からコードをコピーしたので、 "イメージ"ではなく "fim"でなければなりません。 – Vitech

答えて

0

大丈夫..それを解決し

QImage image(cpy.data, cpy.cols, cpy.rows, cpy.step, QImage::Format_RGB888); 
image = image.rgbSwapped(); 
への変換コードを変更します。実際に私はこれがなぜそれを修正したのか分かりません。なぜなら、CV_BGR2RGBではなくCOLOR_BGR2RGBを使うべきであろうからです。