目录
一、项目介绍
- 一、项目介绍
- 二、项目基本配置
- 三、UI界面设计
- 四、主程序实现
- 4.1 widget.h头文件
- 4.2 widget.cpp源文件
- 五、效果演示
利用QImage类实现对图像的简单处理,包括显示图像、灰度化处理等。
二、项目基本配置新建一个Qt案例,项目名称为“ImageTest”,基类选择“QWidget”,点击选中创建UI界面复选框,完成项目创建。
三、UI界面设计UI界面布局如下: 界面中创建了3个控件,其名称和类型如下:
声明三个变量和两个槽函数:
public:
QImage img;//原始图片
unsigned char *graydata;
QImage *grayImg;//灰度图片
private slots:
void on_Choose_clicked();
void on_Gray_clicked();
4.2 widget.cpp源文件
定义打开图片槽函数:
//打开图片
void Widget::on_Choose_clicked()
{
QString path=QFileDialog::getOpenFileName(this,"打开文件","E:\\image\\","(*.jpg)");
img.load(path);
ui->imagelabel->setPixmap(QPixmap::fromImage(img));
}
定义灰度化槽函数: 首先需要获取图像像素字节数据的首地址:
unsigned char *data=img->bits();//获取图像像素字节数据的首地址
需要注意的是,采用bits()方法得到的数据data中像素的组织形式应为ARGB,但实际调试中发现,每个像素中从字节从低到高依次是BGRA,方向刚好反过来。在处理彩色图像时尤其注意。下面会解释这样排列顺序的原因。
灰度处理并显示图像:
int width=img.width();//获取图像宽度
int height=img.height();//获取图像高度
int bytePerLine=(width*24+31)/8;//图像每行字节对齐
graydata=new unsigned char[bytePerLine*height];//存储处理后的数据
unsigned char r,g,b;//定义rgb
for (int i=0;isetPixmap(QPixmap::fromImage(*grayImg));
首先,data指针是存放在栈中的,在windows中栈是向低地址扩展的数据结构(与此对应,堆是向高地址扩展的数据结构)。在小端存储模式下,低地址存放低有效字节,栈中数据的结构如下图所示:
如果没有看懂的话,完整代码可以参考:https://download.csdn.net/download/didi_ya/79578652
ok,以上便是本文的全部内容了,如果对你有所帮助,记得点个赞哟~