linux系统出现画面倾斜,QImage 与 Mat 转换时图像倾斜的原因

发布于:2021-09-28 00:41:45

一般Mat转换为QImage是这样的


Mat rgb;


QImage img;


if(mat.channels() == 3) // RGB image


{


cvtColor(mat,rgb,CV_BGR2RGB);


img = QImage((const uchar*)(rgb.data), //(const unsigned char*)


rgb.cols,rgb.rows,


QImage::Format_RGB888);


}else // gray image


{


img = QImage((const uchar*)(mat.data),


mat.cols,mat.rows,


QImage::Format_Indexed8);


}


但是如果宽度不是4的整数倍,则图像会发生倾斜


原因分析:


QImage转换为Format_RGB888等格式时,每行会按4字节(32位)对齐,不足则自动补齐


但是rgb.data中的数据是没有自动补齐的,所以会导致图像作为QImage显示时,会发生倾斜


因此以上代码应改为如下


Mat rgb;


QImage img;


if(mat.channels() == 3) // RGB image


{


cvtColor(mat,rgb,CV_BGR2RGB);


img = QImage((const uchar*)(rgb.data), //(const unsigned char*)


rgb.cols,rgb.rows,


rgb.cols*rgb.channels(), //new


QImage::Format_RGB888);


}else // gray image


{


img = QImage((const uchar*)(mat.data),


mat.cols,mat.rows,


mat.cols*mat.channels(), //new


QImage::Format_Indexed8);


}







相关资源:asmOpenCV:在OpenCVcv :: Mat和QtQImage和QPixmap之间进行转换简单方法-源码

相关推荐

最新更新

猜你喜欢