温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

qt 5 对图片解析

发布时间:2020-07-05 12:00:18 来源:网络 阅读:927 作者:WZM3558862 栏目:编程语言

Qt中QImage类封装了对于一般图像像素级的操作,图像显示则使用QPixmap。

本文说说对一般图像(常见格式,图像不大)的处理,比如将彩×××像处理为灰度图像。首先要获得源图像数据,对源图像数据进行处理,将结果保存并显示。

QImage *img;//原图像QImage *grayImg;//处理后灰度图像

1.获得原图像数据

qt  5  对图片解析

采用此方法即可,

unsigned char *data=img->bits();//获取图像像素字节数据的首地址

这里要注意,采用bits()方法的到的数据data中像素的组织形式应为ARGB,但实际调试中发现,每个像素中从字节从低到高依次是BGRA,方向刚好反过来。在处理彩×××像时尤其注意。下面会解释这样排列顺序的原因。

2.灰度处理

qt  5  对图片解析

 1 int width=img->width();//图像宽 2 int height=img->height();//图像高 3  4 int bytePerLine=(width*24+31)/8;//图像每行字节对齐 5  6 graydata=new unsigned char[bytePerLine*height];//存储处理后的数据 7  8 unsigned char r,g,b; 9 for (int i=0;i<height;i++)10 {11     for (int j=0;j<width;j++)12     {13         r = *(data+2);14         g = *(data+1);15         b = *data;16 17         graydata[i*bytePerLine+j*3]  =(r*30+g*59+b*11)/100;18         graydata[i*bytePerLine+j*3+1]=(r*30+g*59+b*11)/100;19         graydata[i*bytePerLine+j*3+2]=(r*30+g*59+b*11)/100;20 21         data+=4;22     }23 }

qt  5  对图片解析

上述代码中要注意字节对齐,否则可能处理完后的图像会变形扭曲。此外要注意r/g/b三值的获得,下面解释其具体原因。

首先,data指针是存放在栈中的,在windows中栈是向低地址扩展的数据结构(与此对应,堆是向高地址扩展的数据结构)。在小端存储模式下,低地址存放低有效字节,栈中数据的结构如下图所示:

qt  5  对图片解析

3.显示图像

1 grayImg=new QImage(graydata,width,height,bytePerLine,QImage::Format_RGB888);2 ui.label->setPixmap(QPixmap::fromImage(*grayImg));


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

qt
AI