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);
}
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐