QImage和Mat想换转换中透明部分的处理(PNG)
来源:互联网 发布:群发短信软件哪个好 编辑:程序博客网 时间:2024/05/21 17:10
网上有很多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_to_qimage(cv::Mat const &mat, QImage::Format format){QImage image(mat.cols, mat.rows, format);for (int i = 0; i != mat.rows; ++i){memcpy(image.scanLine(i), mat.ptr(i), image.bytesPerLine() );}return image;} QImage const mat_to_qimage_cpy(cv::Mat &mat, int qimage_format){if(mat.type() == CV_8UC3){ cv::cvtColor(mat, mat, CV_BGR2RGB);return copy_mat_to_qimage(mat, QImage::Format_RGB888);}if(mat.type() == CV_8U){return copy_mat_to_qimage(mat, QImage::Format_Indexed8);}if(mat.type() == CV_8UC4){ if(qimage_format == -1){return copy_mat_to_qimage(mat, QImage::Format_ARGB32);}else{return copy_mat_to_qimage(mat, QImage::Format(qimage_format));}}return QImage();}
调用实例:
cv::Mat mat = qimage2mat(pImage); cv::flip(mat,mat,0); QImage imgShow = mat_to_qimage_cpy(mat,QImage::Format_ARGB32_Premultiplied);
0 0
- QImage和Mat想换转换中透明部分的处理(PNG)
- OpenCv:IplImage,Mat和Qt:QImage之间的快速转换
- 处理网页中png的透明背景
- cv::Mat与QImage间的转换
- IplImage *,Mat,QImage之间的转换
- cv::mat转换成QImage的问题
- Mat转换为QImage
- QImage Mat QPixmap转换
- QImage和 Mat 转化
- Qt中使用OpenCV显示图片时,Mat结构转换为QImage结构的问题
- 【Qt5】OpenCV中Mat类与QImage类转换
- QT的QImage 与 Opencv的Mat 之间的转换
- 将opencv的Mat转换为qt的QImage
- QImage 与 cv::Mat 之间的相互转换
- opencv Mat 与 Qt QImage之间的转换
- QImage 与 cv::Mat 之间的相互转换
- QImage 与 cv::Mat 之间的相互转换
- 【OpenCv】QImage 与 cv::Mat 之间的相互转换
- 使用jQuery解析JSON数据
- 在虚拟机上配置ngnix+php
- Lua参考手册
- Step By Step of Configuring Oracle 11gR2 (11.2.0.1) RAC to RAC Dataguard:
- TexturePacker的初次使用
- QImage和Mat想换转换中透明部分的处理(PNG)
- 第七周项目二—并联电阻问题
- 2014牡丹江——Hierarchical Notation
- 重写boundingBox之--忽略锚点,放缩等因素,得到精灵碰撞区域
- 十大在线编程学习网站 .
- 关于tab页嵌套datagrid高度、宽度适应 滚动条问题
- 备忘录
- 随机测试
- Android 获取版本号