如何将QImage转换回cv :: Mat

时间:2015-06-16 17:28:39

标签: opencv qt5

我已经从videoCapture对象中获取了一个图像,然后我将其转换为QImage以将其发送到服务器。从服务器端收到后,我想对收到的QImage图像进行一些图像处理。所以在我执行任何处理之前,我必须将其转换回cv :: Mat图像。

我有将cv :: Mat转换为QImage

的功能
    // Copy input Mat
    const uchar *qImageBuffer = (const uchar*)mat.data;
    // Create QImage with same dimensions as input Mat
    QImage img(qImageBuffer, mat.cols, mat.rows, mat.step, QImage::Format_RGB888);
    //en
    img.bits();
    return img.rgbSwapped();

具有将QImage转换为cv :: Mat

的功能
Mat QImageToMat(const QImage& src){

cv::Mat tmp(src.height(),src.width(),CV_8UC3,(uchar*)src.bits(),src.bytesPerLine());

cv::Mat result = tmp ; // deep copy just in case (my lack of knowledge with open cv)

for (int i=0;i<src.height();i++) {
    memcpy(result.ptr(i),src.scanLine(i),src.bytesPerLine());
}
cvtColor(result, result,CV_RGB2BGR);


return result;

}

我已经搜索了大约2天如何将QImage转换为cv :: Mat,但没有运气,代码片段对我来说无效。我不知道为什么,转换后的图像看起来很糟糕。你可以看到左边的图像。

是否有人知道可能导致问题的原因?提前谢谢。

LEFT:从QImage转换为Mat RIGHT后的图像:原始图像采用QImage格式

0 个答案:

没有答案