2017-11-03 4 views
0

ich den Code vereinfacht, und es ist so:QPixmap Fromimage gibt Segment Fehler auf das Bild umgerechnet von cv :: Matte

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(); 
} 

aber das Programm nur ohne Debug-Log abgestürzt .. ich viele Bilder habe versucht, und das Ergebnis ist das gleiche. Ich versuchte, den "Stack-Trace" zu finden, und es scheint segfault dazu geben ..

enter image description here

+2

Zuerst tust du 'QImage image (...);' dann tust du 'pm = QPixmap :: fromImage (fim);'. Was ist 'fim'? (Der Grund für den Absturz?) Ich empfehle wärmstens, dies als [MCVE] (http://stackoverflow.com/help/mcve) zu machen. Wenn dies Ihr Problem nicht löst, wird es zumindest helfen, mehr Aufmerksamkeit in dieser Gemeinschaft zu erregen. – Scheff

+0

I gues fim hält einige unitialized Daten –

+0

@Scheff Ah sorry sorry. das sollte "bild" aber nicht "fim" sein, da ich codes aus verschiedenen funktionen kopiere. – Vitech

Antwort

0

okay .. nur den Conversion-Code ändern zu

QImage image(cpy.data, cpy.cols, cpy.rows, cpy.step, QImage::Format_RGB888); 
image = image.rgbSwapped(); 

es gelöst. Eigentlich weiß ich nicht, wieso das das behoben hat. Vielleicht, weil ich COLOR_BGR2RGB anstelle von CV_BGR2RGB verwenden sollte.