cv :: Mat zu QImage konvertieren

Ich habe ein sehr ähnliches Thema gefunden:wie konvertiert man ein opencv cv :: Mat nach qimage , aber es löst mein Problem nicht.

Ich habe die Funktion, cv :: Mat in QImage umzuwandeln

QImage cvMatToQImg(cv::Mat& mat)
{
    cv::Mat rgb;
    if(mat.channels()==1)
    {
        cv::cvtColor(mat,rgb,CV_GRAY2BGR);
        cv::cvtColor(rgb,rgb,CV_BGR2BGRA);
        QImage temp = QImage((unsigned char*)(rgb.data), rgb.cols, 
                              rgb.rows,QImage::Format_ARGB32 );

        QImage returnImage = temp.copy();
        return returnImage;
}

Und es funktioniert bei mir, aber ich möchte es effizienter machen. Erstens: Warum funktioniert das Ändern von 2 cvtColor mit:

cv::cvtColor(mat,rgb,CV_GRAY2BGRA)

scheitert an

QImage returnImage = temp.copy() 

mit segfault.

So können Sie das Kopieren von QImage vermeiden. Wenn ich einfach ein temporäres Bild zurückgebe, erhalte ich einen Segfault.

Können dort noch andere Optimierungen vorgenommen werden? Es wird sehr oft verwendet, deshalb möchte ich es so schnell wie möglich machen.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage