彩色图像Opencv转Qimage【避坑】
场景:
工业相机取流后,用cvMat保存,然后转Qimage在主界面中显示。
pixdat.constData():相机流的内存地址
cv::Mat mat = cv::Mat(height, width, CV_8UC3);
std::memcpy(mat.data, pixdat.constData(), pixdat.size());
QImage imageQt(mat.data, mat.cols, mat.rows, mat.step, QImage::Format_BGR888);
//使用Qimage自带函数 进行 BGR -》 RGB 通道转换
QImage image = imageQt.rgbSwapped();
这种方式效率很慢(界面巨卡)。怀疑Qimage内部没有针对图像处理进行优化(加速)
如果 BGR -》 RGB 通道转换 使用cvMat进行,然后再转换成Qimage,则界面显示很顺畅!
cv::Mat mat = cv::Mat(height, width, CV_8UC3);
std::memcpy(mat.data, pixdat.constData(), pixdat.size());
cv::Mat rgbMat;
cv::cvtColor(mat, rgbMat, cv::COLOR_BGR2RGB);
QImage imageQt(mat.data, mat.cols, mat.rows, mat.step, QImage::Format_BGR888);
QImage image = imageQt.copy();