Qt中Qimage转opencv mat图片
方法一:单通道
Mat matTOimge(QImage & mage)
{
QImage::Format format = mage.format();
if (format != QImage::Format_Indexed8)
{
cout << "此函数只适用于单通道灰度图片的转换";
return Mat();
}
mage.convertToFormat(QImage::Format_Grayscale8); //格式转换
Mat mat = Mat::zeros(mage.height(), mage.width(), CV_8UC1); //创建单通道的mat图片并分配内存
uchar * prtImage = mage.bits(); //获取Qimage图片的首地址
uchar * prtMat = mat.data; //获取mat图像的首地址
memcpy(prtMat, prtImage, mage.height() * mage.width()); //内存复制
return Mat(mat);
}
方法二:三通道8位
Mat matTOimge(QImage & mage)
{
QImage::Format format = mage.format();
if (format != QImage::Format_RGB888)
{
cout << "此函数只适用于3通道8位图像灰度图片的转换";
return Mat();
}
mage.convertToFormat(QImage::Format_RGB888);
Mat mat = Mat (mage.height(),
mage.width(),
CV_8UC3,
mage.bits(),
mage.bytesPerLine());//创建3通道8位图片并分配内存
return Mat(mat);
}