QImage学习学习
QImage这个类之前用过,无外乎是加载一个图片文件显示出来,并没有做过多的研究,目前工作中用到了灰度图以及图片的像素操作,重新学习了下,记录记录。
一些基本操作方法
- 获取图像的首地址:
const uchar *QImage::bits() const
- 获取图像的总字节数
int QImage::byteCount() const
- 获取图像每行字节数
int QImage::bytesPerLine() const
还可以这样计算(width:图像宽度,img.depth是图图像深度):
int bytePerLine = (width * img.depth() + 31) / 32 * 4;
- 存入图像,格式为R,G,B,A(0,1,2,3)
QImage::Format_RGB32
- 存入图像,格式为R,G,B(0,1,2)
QImage::Format_RGB888
- 存入图像,此时需要设定一张颜色表
QVector<QRgb>
,如下QImage::Format_Indexed8
灰度颜色表:
QVector<QRgb> vtrColor;
for(int k = 0;k < 256;++k)
{`
vtrColor.push_back( qRgb(k,k,k) );
}
相关概念
灰度图
普通彩色图片中每个像素中有R、G、B三个分量,而每个分量有256种(0~255)值可以选择,这样一个像素点就可以有1600多万(255255255)的颜色变化范围。
而灰度图就是R、G、B三分分量的值相同的一种特殊彩色图像。即R=G=B.
位深
位深是指存储每个像素所用的位数.
如上面介绍的QImage方法,img.depth()
,该方法可以返回当前图像的位深.
##处理算法
- 常规处理
unsigned char *grayData;
QImage img;
img.load (m_strPath+"/2.jpg");
QPixmap pixmap(QPixmap::fromImage (img));
ui->label->setPixmap (pixmap);
unsigned char *data = img.bits ();
int w = img.width ();
int h = img.height ();
int bytePerLine = (w * 24 + 31) / 8;
//存储处理后的数据
grayData = new unsigned char [bytePerLine * h];
unsigned char r,g,b;
for ( int i = 0; i < h; i++ )
{
for ( int j = 0; j < w; j++ )
{
r = *(data + 2);
g = *(data + 1);
b = *data;
grayData[i * bytePerLine + j * 3] = (r * 30 + g*59 +b*11)/100;
grayData[i*bytePerLine+j*3+1]=(r*30+g*59+b*11)/100;
grayData[i*bytePerLine+j*3+2]=(r*30+g*59+b*11)/100;
data+=4;
//ui->textEdit->append (QString("%1 %2 %3").arg (r).arg (g).arg (b));
}
}
QImage grayImage(grayData,w,h,bytePerLine,QImage::Format_RGB888);
QPixmap pixmap2(QPixmap::fromImage (grayImage));
ui->label_2->setPixmap (pixmap2);
http://kevinlq.com/2017/11/14/QImage-learn/
QImage学习学习的更多相关文章
- 最近开始学习Cesium,学习学习。
最近开始学习Cesium,学习学习.
- SQL SERVER深入学习学习资料参考
SQL SERVER深入学习学习资料参考 1.微软Webcast<sql server 2000完结篇>. 尽管微软Webcast出了很多关于Sql Server的系列课程,但是最为深入讲 ...
- 前端学习:学习笔记(JS部分)
前端学习:学习笔记(JS部分) 前端学习:JS学习总结(图解) JS的简介 JS基本语法 JS内置对象 JS的函数 JS的事件 JS的BOM JS的DOM JS的简介 新建步骤 <body ...
- Deep Learning 深度学习 学习教程网站集锦
http://blog.sciencenet.cn/blog-517721-852551.html 学习笔记:深度学习是机器学习的突破 2006-2007年,加拿大多伦多大学教授.机器学习领域的泰斗G ...
- Deep Learning 深度学习 学习教程网站集锦(转)
http://blog.sciencenet.cn/blog-517721-852551.html 学习笔记:深度学习是机器学习的突破 2006-2007年,加拿大多伦多大学教授.机器学习领域的泰斗G ...
- Golang学习 - 学习资源列表
Golang 学习资源: <Go 语言圣经(中文版)> - 书籍 http://shinley.com/index.html <学习 Go 语言> - 书籍 http://w ...
- C语言基础学习学习前的准备-2
注释让程序更明了 注释帮助我们阅读代码,对代码的运行不会造成任何影响.C语言主要有两种注释方法,一种是使用//进行单行注释,注释内容放在//之后: //需要注释的内容 当你的注释内容不止一行时,可以使 ...
- C语言基础学习学习前的准备-1
C语言概述 欢迎来到C的世界!C语言之所以命名为C,是因为C语言源自Ken Thompson发明的B语言.它是一种可移植语言,通常一个C程序可以经过很少的改动甚至不经改动就可以在其它系统上运行:它强大 ...
- Deep Learning(深度学习) 学习笔记(四)
神经概率语言模型,内容分为三块:问题,模型与准则,实验结果.[此节内容未完待续...] 1,语言模型问题 语言模型问题就是给定一个语言词典包括v个单词,对一个字串做出二元推断,推断其是否符合该语言表达 ...
随机推荐
- 程序员的困境 - R中国用户组-炼数成金
原文:http://www.oschina.net/news/43389/the-plight-of-programmer 在大型公司中不能腐蚀自己的学习能力和时间能力. 最近我为一个内核程序员的职位 ...
- 洛谷——P3128 [USACO15DEC]最大流Max Flow
https://www.luogu.org/problem/show?pid=3128 题目描述 Farmer John has installed a new system of pipes to ...
- 使用wepy开发微信小程序商城第二篇:路由配置和页面结构
使用wepy开发微信小程序商城 第二篇:路由配置和页面结构 前言: 最近公司在做一个微信小程序的项目,用的是类似于vue的wepy框架.我也借此机会学习和实践一下. 小程序官方文档:https://d ...
- ldd 查看程序/动态库 的依赖
今天在帮同事查看一个问题时, 需要用到ldd, 于是就顺便看了一下ldd的实现. 好在ldd本身只是一个脚本, 而不是executable, 可以直接查看实现的代码. 根据注释: 21 # This ...
- matplotlib学习之散点图与条形图
# coding:utf-8 from matplotlib import pyplot as plt import numpy as np plt.style.use('ggplot') x = n ...
- 多线程之线程通信条件Condition二
接上一篇,实现Condition三个条件,有这样一个应用: 1. 有三个进程,第一个进程运行1次,第二个进程运行2次,第三个进程运行3次: 2. 先运行第二个进程,然后第一个,然后第三个: 3. 依 ...
- Intent七大属性之总结 分类: H1_ANDROID 2013-11-10 09:41 1074人阅读 评论(0) 收藏
参考<疯狂android讲义>第5章 1.Intent 用于封装程序的"调用意图",不管想启动一个Acitivity.Service还是BroadcastReceive ...
- MS SQL Server的STRING_SPLIT和STRING_AGG函数
在较新版本的SQL中,出现有2个函数,STRING_SPLIT和STRING_AGG,前者是把带有分隔的字符串转换为表,而后者却是把表某一表转换为以某种字符分隔的字符串. 如下面: DECLARE @ ...
- 解析C#内存管理
C#内存管理解析 前言:对于很多的C#程序员来说,经常会很少去关注其内存的释放,他们认为C#带有强大的垃圾回收机制,所有不愿意去考虑这方面的事情,其实不尽然,很多时候我们都需要考虑C#内存的管理问题, ...
- VO对象通过groovy模板映射XML文件
介绍 之前写过JAVA+XSLT相关的技术博客,近期研究了一个开源工具包org.codehaus.groovy,处理VO对象和XML文件映射很方便. 简言之:将VO对象中的属性(包含Collectio ...