Qt实用技巧:测试QImage加载解码、QImage使用原数据、QImage格式转换等等的时间消耗

简介: Qt实用技巧:测试QImage加载解码、QImage使用原数据、QImage格式转换等等的时间消耗

若该文为原创文章,未经允许不得转载

原博主博客地址:https://blog.csdn.net/qq21497936

原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062

本文章博客地址:https://blog.csdn.net/qq21497936/article/details/79562841

各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究

目录

需求

Demo

ReadMe

测试耗时项

加载图片的信息(可使用Demo替换自己的图片尝试即可)

演示图

核心代码


Qt开发专栏:实用技巧(点击传送门)

 

   Qt实用技巧:测试QImage加载解码、QImage使用原数据、QImage格式转换等等的时间消耗

 

需求

       测试Qt软解码时间,测试QImage数据类型转换的时间,确定项目方案。

 

Demo

       下载地址:https://download.csdn.net/download/qq21497936/10287385

     

ReadMe

 

测试耗时项

       1.从文件读取二进制转为image再到pixmap的时间

       2.image加载文件转换成pixmap的时间

       3.image加载文件只记录转换成pixmap的时间

       4.rgb数据赋值给image转换成pixmap的时间

       5.rgb数据赋值给image只记录转换成pixmap的时间

 

加载图片的信息(可使用Demo替换自己的图片尝试即可)

5*1920*1080p(较大)

 

演示图

 

核心代码

特别注意:用QFile读取文件耗时1ms不到,已测试过

1.从文件读取二进制转为image再到pixmap的时间

total = 0;
    for(int index = 0; index < _dirs; index++)
    {
        for(int index2 = 0; index2 < _count; index2++)
        {
            QElapsedTimer t;
            t.start();
            QString file = QString("./images/images%1/%2.jpg").arg(index+1).arg(index2+1);
            DEBUG(file);
            // 测试证明,读取文件根本花不了几个ms
            QFile f(file);
            f.open(QIODevice::ReadOnly);
            QByteArray data = f.readAll();
            // 使用QFile读取二进制,转换成image后再转换成pixmap
            QImage image;
            image.loadFromData(data);//转换成QImage
            QPixmap bmp;
            bmp = QPixmap::fromImage(image);//转换成QPixmap
            QString str = QString("file: %1 size:%2 time:%3").arg(file).arg(f.size()).arg(t.elapsed());
            total += t.elapsed();
            DEBUG(str);
            ui->textBrowser->append(str);
            f.close();
        }
    }
    ui->textBrowser->append(QString("total time : %1").arg(total));

2.image加载文件转换成pixmap的时间

total = 0;
    for(int index = 0; index < _dirs; index++)
    {
        for(int index2 = 0; index2 < _count; index2++)
        {
            QElapsedTimer t;
            QString file = QString("./images/images%1/%2.jpg").arg(index+1).arg(index2+1);
            t.start();
            // 使用QImage直接加载文件,再转换成pixmap
            DEBUG(file);
            QImage image;//转换成QImage
            image.load(file);
            QPixmap bmp;
            bmp = QPixmap::fromImage(image);//转换成QPixmap
            QString str = QString("file: %1 time:%2").arg(file).arg(t.elapsed());
            total += t.elapsed();
            DEBUG(str);
            ui->textBrowser_2->append(str);
        }
    }
    ui->textBrowser_2->append(QString("total time : %1").arg(total));

3.image加载文件只记录转换成pixmap的时间

total = 0;
    for(int index = 0; index < _dirs; index++)
    {
        for(int index2 = 0; index2 < _count; index2++)
        {
            QElapsedTimer t;
            QString file = QString("./images/images%1/%2.jpg").arg(index+1).arg(index2+1);
            // 使用QImage直接加载文件,再转换成pixmap
            DEBUG(file);
            QImage image;//转换成QImage
            image.load(file);
            t.start();
            QPixmap bmp;
            bmp = QPixmap::fromImage(image);//转换成QPixmap
            QString str = QString("file: %1 time:%2").arg(file).arg(t.elapsed());
            total += t.elapsed();
            DEBUG(str);
            ui->textBrowser_3->append(str);
        }
    }
    ui->textBrowser_3->append(QString("total time : %1").arg(total));

4.rgb数据赋值给image转换成pixmap的时间

total = 0;
    for(int index = 0; index < _dirs; index++)
    {
        for(int index2 = 0; index2 < _count; index2++)
        {
            QElapsedTimer t;
            QString file = QString("./images/images%1/%2.jpg").arg(index+1).arg(index2+1);
            QImage image;//转换成QImage
            image.load(file);
            QByteArray byteArray;
            for(int h = 0; h < image.height(); h++)
            {
                for(int w = 0; w < image.width(); w++)
                {
                    QColor color = image.pixelColor(w, h);
//                    qDebug() << __FILE__ << __LINE__ << color.alpha() << (char)color.red() << (char)color.green() << (char)color.blue();
//                    byteArray.append((uchar)color.alpha());
                    // uchar 输入 gba 给 image当uchar *
//                    、QImage::Format_RGB32,存入格式为B,G,R,A 对应 0,1,2,3
//                        QImage::Format_RGB888,存入格式为R, G, B 对应 0,1,2
//                        QImage::Format_Indexed8,需要设定颜色表,QVector<QRgb>
                    byteArray.append((uchar)color.blue());
                    byteArray.append((uchar)color.green());
                    byteArray.append((uchar)color.red());
                    byteArray.append((uchar)color.alpha());
//                    if(w == 0 && h == 0)
//                        qDebug() << __FILE__ << __LINE__ << byteArray.toHex();
                }
            }
            t.start();
            QImage image2((uchar *)byteArray.data(), image.width(), image.height(), QImage::Format_RGB32);
//            QImage image2((uchar *)byteArray.data(), 1, 1, QImage::Format_RGB32);
            QPixmap bmp;
            bmp = QPixmap::fromImage(image2);//转换成QPixmap
            QString str = QString("file: %1 time:%2 width:%3 height:%4").arg(file).arg(t.elapsed()).arg(image2.width()).arg(image2.height());
            total += t.elapsed();
//            qDebug() << __FILE__ << __LINE__ << image.width() << image.height() << image2.width() << image2.height();
//            image2.pixel(0, 0);
            if(image.pixel(1000, 1000) == image2.pixel(1000,1000))
                ui->textBrowser_4->append(str);
//            for(int h = 0; h < image2.height(); h++)
//            {
//                for(int w = 0; w < image2.width(); w++)
//                    ;
//                int w = 1000;
//                qDebug() << __FILE__ << __LINE__ << w << h << image.pixel(w, h) << image2.pixel(w, h) << byteArray.size();
//            }
                DEBUG(str);
        }
    }
    ui->textBrowser_4->append(QString("total time : %1").arg(total));

5.rgb数据赋值给image只记录转换成pixmap的时间

    total = 0;
    for(int index = 0; index < _dirs; index++)
    {
        for(int index2 = 0; index2 < _count; index2++)
        {
            QElapsedTimer t;
            QString file = QString("./images/images%1/%2.jpg").arg(index+1).arg(index2+1);
            QImage image;//转换成QImage
            image.load(file);
            QByteArray byteArray;
            for(int h = 0; h < image.height(); h++)
            {
                for(int w = 0; w < image.width(); w++)
                {
                    QColor color = image.pixelColor(w, h);
//                    qDebug() << __FILE__ << __LINE__ << color.alpha() << (char)color.red() << (char)color.green() << (char)color.blue();
//                    byteArray.append((uchar)color.alpha());
                    // uchar 输入 gba 给 image当uchar *
                    byteArray.append((uchar)color.blue());
                    byteArray.append((uchar)color.green());
                    byteArray.append((uchar)color.red());
                    byteArray.append((uchar)color.alpha());
                }
            }
            QImage image2((uchar *)byteArray.data(), image.width(), image.height(), QImage::Format_RGB32);
            t.start();
            QPixmap bmp;
            bmp = QPixmap::fromImage(image2);//转换成QPixmap
            QString str = QString("file: %1 time:%2 width:%3 height:%4").arg(file).arg(t.elapsed()).arg(image2.width()).arg(image2.height());
            total += t.elapsed();
//            qDebug() << __FILE__ << __LINE__ << image.width() << image.height() << image2.width() << image2.height();
//            image2.pixel(0, 0);
            if(image.pixel(1000, 1000) == image2.pixel(1000,1000))
                ui->textBrowser_5->append(str);
            DEBUG(str);
        }
    }
    ui->textBrowser_5->append(QString("total time : %1").arg(total));

 

原博主博客地址:https://blog.csdn.net/qq21497936

原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062

本文章博客地址:https://blog.csdn.net/qq21497936/article/details/79562841



相关文章
|
2月前
|
机器学习/深度学习 PyTorch 算法框架/工具
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
这篇文章介绍了如何使用PyTorch框架,结合CIFAR-10数据集,通过定义神经网络、损失函数和优化器,进行模型的训练和测试。
159 2
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
|
1月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
36 6
|
1月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段。本文介绍了 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,强调了样本量、随机性和时间因素的重要性,并展示了 Python 在 A/B 测试中的具体应用实例。
30 1
|
2月前
|
存储 测试技术 数据库
数据驱动测试和关键词驱动测试的区别
数据驱动测试 数据驱动测试或 DDT 也被称为参数化测试。
37 1
|
2月前
|
机器学习/深度学习 监控 计算机视觉
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
本文介绍了如何使用YOLOv7进行目标检测,包括环境搭建、数据集准备、模型训练、验证、测试以及常见错误的解决方法。YOLOv7以其高效性能和准确率在目标检测领域受到关注,适用于自动驾驶、安防监控等场景。文中提供了源码和论文链接,以及详细的步骤说明,适合深度学习实践者参考。
604 0
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
2月前
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
176 0
|
2月前
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
69 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
|
2月前
|
机器学习/深度学习 XML 并行计算
目标检测实战(七): 使用YOLOX完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用YOLOX完成图像目标检测任务的完整流程,包括数据准备、模型训练、验证和测试。
256 0
目标检测实战(七): 使用YOLOX完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
2月前
|
测试技术 Python
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
本文介绍了使用Python的unittest框架来加载测试用例的四种方法,包括通过测试用例类、模块、路径和逐条加载测试用例。
100 0
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
|
2月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
57 4