cv :: Mat to QImage conversion

Znalazłem bardzo podobny temat:jak przekonwertować cv opencv :: Mat na qimage , ale to nie rozwiązuje mojego problemu.

Mam funkcję konwertującą cv :: Mat na QImage

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

I działa dla mnie, ale chcę sprawić, by było bardziej wydajne. Po pierwsze: dlaczego zmiana 2 funkcji cvtColor na:

cv::cvtColor(mat,rgb,CV_GRAY2BGRA)

nie działa

QImage returnImage = temp.copy() 

z segfault.

Następnie, jak wyeliminować kopiowanie QImage. Kiedy po prostu zwracam tymczasowy obraz, dostaję segfault.

Czy można tam dokonać innych optymalizacji? Jest to bardzo często używana funkcja, więc chcę ją zrobić tak szybko, jak to możliwe.

questionAnswers(3)

yourAnswerToTheQuestion