QImage和Mat想换转换中透明部分的处理(PNG)

这篇博客主要讨论了在将QImage转换为Mat时遇到的透明部分显示为黑色的问题。作者通过研究和实践,找到了正确的处理方法,解决了这个问题。
摘要由CSDN通过智能技术生成

网上有很多QImage和Mat的相互转换的代码

如:

http://blog.sina.com.cn/s/blog_7559ce850100ydvy.html

http://hi.baidu.com/windroc/item/5c4b4a13725c11433a176eca

但这些代码都存在一个问题

就是处理png图片时,透明部分显示为黑色

经过认真自己的研究和修改尝试

终于搞定


1、QImage to Mat

cv::Mat qimage2mat(const QImage& qimage)
{
cv::Mat mat = cv::Mat(qimage.height(), qimage.width(), CV_8UC4, (uchar*)qimage.bits(), qimage.bytesPerLine()); 
cv::Mat mat2 = cv::Mat(mat.rows, mat.cols, CV_8UC4 ); 
int from_to[] = { 0,0, 1,1, 2,2 ,3, 3 }; 
cv::mixChannels( &mat, 1, &mat2, 1, from_to, 4 ); 
return mat2; 
}

2、Mat to QImage

template<typename T>
inline QImage const reference_mat_to_qimage(cv::Mat &mat, QImage::Format format)
{
	return QImage((T*)(mat.data), mat.cols, mat.rows, mat.step, format);
}  

QImage const copy_mat_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值