图像处理 QImage
在Qt中有四种处理图像的方法:
- QImage :使用I/O ,可以对像素进行处理
- QPixmap:主要用在屏幕的显示
- QBitmap: QPixmap的子类,处理颜色深度,只能显示黑白两种颜色,用于遮罩
- QPicture:用来重演QPainter命令
QPainter绘制图像的方法:
- QPainter::drawImage() 绘制Image
- QPainter::drawPixmap() 绘制Pixmap
- QPainter::drawPixmap() 绘制Bitmap
- QPainter::drawPicture() 绘制Picture
QImage
- QImage 类提供独立于硬件的图像表示形式,允许直接访问像素数据,并可用作绘画设备
- QImage是QPaintDevice的子类,所以QPainter可以直接在图像上绘制。在 QImage 上使用Qpainter时,可以在当前 GUI 线程以外的其他线程中执行绘制。
- QImage 对象可以按值传递,因为 QImage 类使用隐式数据共享。Qmage对象也可以流式传输和比较。
Qt中支持的图像格式:
格式 | 支持的操作 |
BMP | 读/写 |
GIF | 读 |
JPG | 读/写 |
JPEG | 读/写 |
PNG | 读/写 |
PBM | 读 |
PGM | 读 |
PPM | 读/写 |
XBM | 读/写 |
XPM | 读/写 |
QImage::Format
有几十种图像格式,可以去查看官方文档。
QImage::Format_Invalid | 图像无效。 |
QImage::Format_Indexed8 | 图像使用 8 位索引存储到颜色图中 |
QImage::Format_RGB32 | 图像使用 32 位 RGB 格式 (0xffRRGGBB) 存储 |
QImage::Format_ARGB32 | 图像使用 32 位 ARGB 格式 (0xAARRGGBB) 存储。 |
QImage::Format_RGB16 | 图像使用 16 位 RGB 格式 (5-6-5) 存储。 |
构造函数:有两种
图像参数:
size() | 图片的大小 |
width() | 图片宽度 |
height() | 图片的高度 |
dotsPertMeterX() | 返回在物理计量中水平适合的像素数 |
dotsPertMeterY() | 返回在物理计量中竖直适合的像素数 |
valid() | 判断是否为有效位置 |
offset() | 返回偏移量 |
像素操作:
setPixelColor() | 设置指定坐标的颜色 |
setPixel(position,index_rgb) | 返回给定位置的像素颜色为index_rgb |
setColor() | 设置索引处的颜色 |
setColorCount() | 扩容 |
pixel() | 返回索引处的颜色 QRgb |
pixelColor() |
返回索引处的颜色 QColor |
pixelFromat() | 返回指定位置的格式 |
pixelIndex() | 返回指定位置的索引 |
scanLine() | 返回索引处的像素指针 |
bits() | 返回指向第一个像素数据的指针。这等效于scanLine(0) |
设置像素的颜色:
1.直接设置颜色
QImage image(3,3,QImage::Format_Indexed8);//直接设置像素点位颜色image.setPixel(0,0,qRgb(0,255,255));image.setPixel(0,1,qRgb(255,0,255));image.setPixel(0,2,qRgb(255,255,0));
2.通过setColor()存储颜色然后再添加
setColor()会存储索引处的颜色
QImage image(3,3,QImage::Format_Indexed8);//直接设置像素点位颜色image.setColor(0,qRgb(0,255,255));//索引0对应的元素为qRgb(0,255,255)image.setColor(1,qRgb(255,0,255));//索引1对应的元素为qRgb(255,0,255)image.setColor(2,qRgb(255,255,0));//索引2对应的元素为qRgb(255,255,0)//设置颜色image.setPixel(0,0,0);image.setPixel(0,1,1);image.setPixel(0,2,2);
遍历像素 :
1.直接遍历
QImage image(10,10,QImage::Format_Indexed8);//遍历像素for(int x=0;x<image.width();x++){for(int y=0;y<image.height();y++){image.setPixel(x,y,qRgb(100,100,100));//把全部像素的颜色修改为qRgb(100,100,100)}}
2.按行遍历
使用scanLine()获取一行的像素
- uchar*QImage::scanLine(inti) 返回的是一个指针
- 访问32bpp 图像数据,请将返回的指针转换为(QRgb具有 32 位大小)并使用它来读取/写入像素值
- 使用参数时使用qRed()、qGreen()、qBlue()和qAlpha() 访问像素
QImage image(10,10,QImage::Format_RGB32);//遍历像素//读取行for(int y=0;y<image.height();y++){QRgb* line=(QRgb *)image.scanLine(y);//读取行for(int x=0;x<image.height();x++){//遍历像素颜色qDebug()<<qRed(line[x]);qDebug()<<qGreen(line[x]);qDebug()<<qBlue(line[x]);}}
实例的话请看点击以下链接:
基于Qt的图像处理技术和算法_拳四郎的博客-CSDN博客_qt 滤波
一些其他的函数:
allGray() | 判断颜色是灰色阴影(红绿蓝相同) |
colorTable() | 返回图像中的颜色表 |
depth() | 返回图像的深度 |
fill() | 给定颜色填充整个像素 |
invertPixels() | 反转图像的像素值 |
load() | 读取设备的图像 |
save() | 保存图像 |
scaled() | 缩放 |
setText() | 将图像文本设置为给定文本,并将其与给定键关联 |
valid | 判断点位是否在图像上 |
打开或保存图片:load save
QImage image(10,10,QImage::Format_RGB32);image.load("D:/Qt_Android_work/data_082/456.png");//打开图像文件image.save("D:/123.png0");//保存图像文件
fill填充的使用:
void Widget::paintEvent(QPaintEvent *event)
{QPainter painter(this);QImage image(100,100,QImage::Format_RGB32);image.fill(qRgb(200,200,200));//填充painter.drawImage(0,0,image);
}
缩放的使用:
- 该函数返回的是一个副本
- size() 为图像大小
- 后面的参数为设置纵横比
void Widget::paintEvent(QPaintEvent *event)
{QPainter painter(this);QImage image(100,100,QImage::Format_RGB32);image.fill(qRgb(200,200,200));//填充image=image.scaled(image.width()*5,image.height()*5);//放大5倍painter.drawImage(0,0,image);
}
QImage可以用来绘图
QImage 也可以作为设备进行绘图
void Widget::paintEvent(QPaintEvent *event)
{QPainter painter;QImage image(200,200,QImage::Format_ARGB32);painter.begin(&image);painter.setPen(QPen(Qt::red,3));painter.setBrush(Qt::cyan);painter.drawRect(0,0,100,100);painter.drawEllipse(100,100,100,100);painter.end();painter.begin(this);painter.drawImage(0,0,image);//绘制
}
图像处理 QImage相关推荐
- opencv将图像处理之后显示在label上(Mat转化为qimage)转换之后label显示全黑
opencv将图像处理之后显示在label上(Mat转化为qimage)转换之后label显示全黑 1.本实验要完成的功能:利用opencv将原图像灰度处理,然后显示在label上 2.图像处理程序: ...
- opencv QImage与Mat 互转 及简单的图像处理
opencv(mat与qimage 的互转)及简单的图像处理 一.opencv库文件 二.使用方式(Qt) 三.QImage 转 Mat (不太全,多多指教) 四.Mat转 QImage 五.一些简单 ...
- opencv图像处理总结
opencv图像处理基本操作 1. 矩阵数据类型 通用矩阵数据类型: CV_<bit_depth>(S|U|F)C<number_of_channels> 其中,S表示带符号整 ...
- Qt中的图像处理与绘制
文章目录 1 图像处理与绘制 1.1 QImage和QPixImage 1.2 简单图像处理 1.3 屏幕截图 1 图像处理与绘制 1.1 QImage和QPixImage 设备无关图像类-QImag ...
- (3两个例子)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练 1综述 http://www.cnblogs.com/jsxyhelu/p/7907241.html 2环境架设 http://www ...
- QImage 与 cv::Mat 之间的相互转换
近期做图像处理方面的项目比較多,非常多算法自己从头写的话太浪费时间,并且自己写的也不一定完好,早就听说OpenCV在图像处理算法方面功能非常强大,一直没时间学习,这次正好项目用到了.暂时抱佛脚学习些O ...
- Qt:OpenCV—Q图像处理基本操作(Code)
原文链接:http://www.cnblogs.com/emouse/archive/2013/03/31/2991333.html 作者写作一系列:http://www.cnblogs.com/em ...
- QT实现图像处理-傅立叶变换、傅立叶反变换、平滑、锐化与模板匹配
From: http://www.cnblogs.com/qytan36/archive/2010/04/04/1704226.html 实验环境: 1,Linux操作系统 2,QT3编程开发环境 3 ...
- pyqt5 获取Qlabel中的图片并对其进行处理(包括Qimage转换为Mat)
1.提取Qlabel中的图片 qimg=self.showScreenImgLabel.pixmap().toImage() 2.将Qimage转换为mat def qimage2mat(self,q ...
最新文章
- linux网络虚拟化
- mysql server uuids_slave have equal MySQL Server UUIDs原因及解决
- centos 防火墙位置
- Eclipse中安装freemarker插件
- LeetCode 202. 快乐数(快慢指针)
- java导入项目存在,如何将预先存在的Java项目导入Eclipse并启动并运行?
- Java接口的实现源代码_Comparable接口的实现:源代码
- ajax请求sql数据库数据类型,ajax请求mysql文件数据库
- windows如何设定定时关机和取消定时
- 传奇服务器文件组成,【教程】传奇服务端(版本)的结构以及重要文件功能的概述-A02...
- 计算机上自带的打字游戏,Steam这款打字游戏,让多少人想起自己曾经学校上电脑课的日子?...
- QMC5883L 校准方法
- 方舟服务器在线人数查询软件,方舟生存进化怎么查看在线人数
- Linux 安装 Composer
- 我曾在外包公司呆过,谈一谈外包要不要进?
- 面试题:fail-safe 机制与 fail-fast 机制分别有什 么作用
- Flutter文本输入框-TextField
- 2020外地人如何把户口迁入广州
- Efficient Estimation of Word Representations in Vector Space翻译
- scrapy源码分析(六)---------------CrawlProcess
热门文章
- 3000万美元投资,看看以太坊未来12个月又有哪些大动作!
- PB :图片显示+数据库保留图片路径
- 不小心关闭了Windows资源管理器问题的解决方法
- 用安卓手机juicessh连接linux系统
- Oracle数据库:oracle启动,oracle客户端工具plsql安装教程和使用方法
- 计算机毕设(附源码)JAVA-SSM基于web的医院门诊管理系统
- win7下局域网打印机共享使用
- excel导入失败,显示不支持excel文件,解决方法:
- m4v视频如何转换mp4格式,简单操作一学就会
- 利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']: