我已经从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格式