qimage 构造函数copy函数怎么使用

使用QT5绘制OpenCV3的Mat图像 - 推酷
使用QT5绘制OpenCV3的Mat图像
QT在跨平台编程中应用越来越广泛,C++中用跨平台开发界面(包括嵌入式设备),QT基本成为第一选择,OpenCV从3.0开始已经慢慢抛弃了过去的C接口,统一改为C++接口,存储图像的IplImage也在被Mat替代,本文主要讲如何使用QT绘制Mat。
在QT中用QImage存放图像,QImage有多种使用方法,本文讲解QImage的内存分配和将Mat高效复制到QImage中。
一 首先初始化QImage空间
int pixSize = 3; //像素大小 RGB888就是三个字节
uchar *buf = new uchar[width()*height() * pixSize ];
img = QImage(buf, width(), height(), QImage::Format_RGB888);
pixSize 表示像素大小 像素大小 RGB888就是三个字节
其中width()和height()对应的是QWidge控件的宽和高,这里要注意的一点是QWidge的宽度最好是4的倍数,QImage存储的每行空间是按4对齐,如果不是4的倍数,他会补空的,这样会造成图像空间不连续,预分配的空间就不对了。后面的复制策略也要变化,效率也会下降一些,需要一行一行复制。
Format_RGB888是QImage支持的像素格式,5.8版本开始支持灰度图了,Format_RGB888表示RGB分别用8位存储也就是3个字节;
二 复制空间
//首先将Mat图像的大小变为和QImage一致,这里就是确定显示策略,直接大小一致,表示图像拉升到和QWidge一致。
cv::resize(mat, des, Size(img.size().width(), img.size().height()));
//颜色转换,QImage目前不支持 BGR888,所以需要转换,不然颜色次序不对
cv::cvtColor(des, des, COLOR_BGR2RGB);
//最后复制空间,这里要注意的是要保证Mat是连续空间(打开图像和视频默认都是连续空间),QImage也是连续空间(4的倍数)。
memcpy(img.bits(), des.data, des.cols*des.rows*des.elemSize());
三 绘制图像
最后重载 paintEvent函数对QImage进行绘制
p.begin(this);
p.drawImage(QPoint(0, 0), img);
更多的资料也可以关注我csdn上的视频课程
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致Posts - 135,
Articles - 0,
Comments - 5
09:53 by 江湖么名, ... 阅读,
用qt代码怎样编写图片保存格式
qt提供了多个保存图片的接口,比较常用的接口如下
bool QPixmap::save ( const QString & fileName, const char * format = 0, int quality = -1 ) const
参数说明:
fileName 文件的路径
可选参数:format 图片的格式(qt目前支持的格式见下表),如果未设置该值
则根据文件路径的后缀名来判断图片的存储格式。
可选参数:quality 图片的质量(可设置成0-100之内的值,数值越大说明保存的质量越好),如果未设置该值,则按照默认的设置来保存图片。
表一:qt 4.6.3支持的文件格式
BMP Windows Bitmap
JPG Joint Photographic Experts Group
JPEG Joint Photographic Experts Group
PNG Portable Network Graphics
PPM Portable Pixmap
TIFF Tagged Image File Format
XBM X11 Bitmap
XPM X11 Pixmap
bool QImage::save ( const QString & fileName, const char * format = 0, int quality = -1 ) const
参数说明同上;
这里举个使用QPixmap保存图片的例子:
if ( pixmap.load( "D://images//source.png" ) )
if ( pixmap.save("distance.jpg") )
//save image successful
//load image failure
&注:如果需要对图片的保存参数进行更多的设置,可以使用QImageWriter提供的接口来实现
QT4.6中将QImage保存为JPG格式
&&& 貌似很容易,因为看QImage的save函数说明就可以做这种事情。
&&& 但是实际运行保存却失败。搜索之。
&&& 发现应该要找个疙瘩放这两句话:
#include &QtPlugin&
Q_IMPORT_PLUGIN(qjpeg)
&&& 之后将 QT目录/plugins/imageformats/qjpegd.lib(Debug)或者 QT目录/plugins/imageformats/qjpeg.lib(Release)也link进来就ok了。
&#QT5.2貌似没这个问题。。。。

我要回帖

更多关于 qimage copy 的文章

 

随机推荐