cv :: Mat a QImage conversión

He encontrado un tema muy similar:cómo convertir un cv opencv :: Mat a qimage , pero no resuelve mi problema.

Tengo la función de convertir cv :: Mat a 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;
}

Y funciona para mi pero quiero hacerlo más eficiente. Primero: por qué cambiar 2 funciones de cvtColor con:

cv::cvtColor(mat,rgb,CV_GRAY2BGRA)

falla en

QImage returnImage = temp.copy() 

con segfault.

Entonces, cómo eliminar la copia de QImage. Cuando simplemente devuelvo la imagen temporal, obtengo segfault.

¿Se pueden hacer otras optimizaciones allí? Es una función muy utilizada, así que quiero hacerlo lo más rápido posible.

Respuestas a la pregunta(3)

Su respuesta a la pregunta