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学习学习的更多相关文章

  1. 最近开始学习Cesium,学习学习。

    最近开始学习Cesium,学习学习.

  2. SQL SERVER深入学习学习资料参考

    SQL SERVER深入学习学习资料参考 1.微软Webcast<sql server 2000完结篇>. 尽管微软Webcast出了很多关于Sql Server的系列课程,但是最为深入讲 ...

  3. 前端学习:学习笔记(JS部分)

    前端学习:学习笔记(JS部分) 前端学习:JS学习总结(图解)    JS的简介 JS基本语法 JS内置对象 JS的函数 JS的事件 JS的BOM JS的DOM JS的简介 新建步骤 <body ...

  4. Deep Learning 深度学习 学习教程网站集锦

    http://blog.sciencenet.cn/blog-517721-852551.html 学习笔记:深度学习是机器学习的突破 2006-2007年,加拿大多伦多大学教授.机器学习领域的泰斗G ...

  5. Deep Learning 深度学习 学习教程网站集锦(转)

    http://blog.sciencenet.cn/blog-517721-852551.html 学习笔记:深度学习是机器学习的突破 2006-2007年,加拿大多伦多大学教授.机器学习领域的泰斗G ...

  6. Golang学习 - 学习资源列表

    Golang 学习资源: <Go 语言圣经(中文版)>  - 书籍 http://shinley.com/index.html <学习 Go 语言> - 书籍 http://w ...

  7. C语言基础学习学习前的准备-2

    注释让程序更明了 注释帮助我们阅读代码,对代码的运行不会造成任何影响.C语言主要有两种注释方法,一种是使用//进行单行注释,注释内容放在//之后: //需要注释的内容 当你的注释内容不止一行时,可以使 ...

  8. C语言基础学习学习前的准备-1

    C语言概述 欢迎来到C的世界!C语言之所以命名为C,是因为C语言源自Ken Thompson发明的B语言.它是一种可移植语言,通常一个C程序可以经过很少的改动甚至不经改动就可以在其它系统上运行:它强大 ...

  9. Deep Learning(深度学习) 学习笔记(四)

    神经概率语言模型,内容分为三块:问题,模型与准则,实验结果.[此节内容未完待续...] 1,语言模型问题 语言模型问题就是给定一个语言词典包括v个单词,对一个字串做出二元推断,推断其是否符合该语言表达 ...

随机推荐

  1. 【例题 6-19 UVA - 1572】Self-Assembly

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 旋转和翻转,会发现. 如果可以顺着某个方向一直放的话. 总是能转换成往下或者往右连的. 则只要能够出现一个连接顺序的循环,则总是有解 ...

  2. 【AtCoder Beginner Contest 074 C】Sugar Water

    [链接]h在这里写链接 [题意] 让你在杯子里加糖或加水. (4种操作类型) 糖或水之间有一定关系. 糖和水的总量也有限制. 问你糖水浓度的最大时,糖和糖水的量. [题解] 写个dfs就好. 每次有4 ...

  3. SpringMVC响应Ajax请求(@Responsebody注解返回页面)

    项目需求描述:page1中的ajax请求Controller,Controller负责将service返回的数据填充到page2中,并将page2整个页面返回到page1中ajax的回调函数. 一句话 ...

  4. uiview关联xib

    1,在需要实例的地方 //加载一个uiview的作法 [LotteryInvestigationView *lotteryInvestigationView=[[[NSBundle mainBundl ...

  5. php语法同java语法的基本区别(实例项目需求,php才能熟)

    php语法同java语法的基本区别(实例项目需求,php才能熟) 一.总结 看下面 二.PHP基本语法以及和Java的区别 .表示字符串相加 ->同Java中的. $作为变量的前缀,除此之外,变 ...

  6. tensorflow:图(Graph)的核心数据结构与通用函数(Utility function)

    Tensorflow一些常用基本概念与函数(2) 1. 图(Graph)的核心数据结构 tf.Graph.__init__:建立一个空图: tf.Graph.as_default():一个将某图设置为 ...

  7. 【Codeforces Round #185 (Div. 2) D】Cats Transport

    [链接] 链接 [题意] 有n座山,m只猫. 每只猫都在其中的一些山上玩. 第i只猫在h[i]山上玩,且会在t[i]时刻出现在山脚下(然后就一直在那里等) 然后有p个人. 它们听从你的安排. 在某个时 ...

  8. 【a101】高精度实数加法

    Time Limit: 1 second Memory Limit: 2 MB 问题描述 给出两个高精度正实数(可以含有小数点或没有),最长200位,字符串读入 求它们的和,小数部分末尾的0要舍去. ...

  9. Android——WebView方式开发web App

    昨天接到个酬劳丰厚的任务.把java新生系统做成webApp,想想蛮简单的.所以当时就装作非常为难的样子答应了. 所谓Web App,用曾经我那个老PM的话来说.就是在壳里面套上页面.这里的壳相当于浏 ...

  10. BAPC2014 C&amp;&amp;HUNNU11583:Citadel Construction(几何)

    题意: 给出一系列的点,要求寻找最多4个点.使得组成一个面积最大的多边形 思路: 非常显然仅仅有两种情况.要么是三角形,要么是四边形 首先不难想到的是.先要把最外面的点都找出来,事实上就是找凸包 可是 ...