Qt利用ImageWatch实现图片查看功能

 更新时间:2022年04月19日 13:59:49   作者:libaineu2004  
Visual Studio有专门针对OpenCV开发的插件,名叫ImageWatch,图片放大之后可以查看RGB的像素值。本文将利用这一查件实现图片查看功能,需要的可以参考一下

使用Qt实现ImageWatch图片查看功能,图片放大可见RGB像素值。支持打开大图片,即打开一个几百MB甚至几GB的大图片。

1、什么是ImageWatch

Visual Studio有专门针对OpenCV开发的插件,名叫ImageWatch,图片放大之后可以查看RGB的像素值。

Image Watch 2019 - Visual Studio Marketplace

Image Watch Help

2、得空自己用Qt仿照实现了一下这个功能:

纯粹Qt写的,没有使用Halcon和OpenCV库。

(1)打开8位的灰度图

鼠标滚轮放大之后,可以查看灰度值;鼠标中键下压可以拖动图片;

(2)打开24位的彩色图

鼠标放大之后可以查看RGB三通道的数值;鼠标中键下压可以拖动图片;

 3、怎么使用Qt打开一个几百MB甚至几GB的大图片?

Qt官方文档建议使用QImageReader,直接上源码:

bool MainWindow::readBigImage(const QString &path)
{
    QImageReader reader(path);
    reader.setAutoTransform(true);
    if (!reader.canRead())
    {
        return false;
    }
 
    QSize originSize = reader.size(); //原始的分辨率
    qDebug() << originSize;
    QSize newSize = originSize.scaled(800, 600, Qt::KeepAspectRatio); //缩放后的分辨率,保持纵横比
    qDebug() << newSize;
    QRect clipRt(500, 0, 1000, 1000);
 
//读取的方式
#if 1
    reader.setScaledSize(newSize); //按照指定的缩放大小来读取
#else
    reader.setClipRect(clipRt); //按照指定的矩形区域来读取
#endif
 
    QImage image = reader.read();
    if (image.isNull())
    {
        QFile file(path);
        file.open(QIODevice::ReadOnly);
        QByteArray data = file.readAll();
        image = QImage::fromData(data).scaled(newSize, Qt::KeepAspectRatio);
 
        if (image.isNull())
        {
            return false;
        }
    }
 
    ui->graphicsView->addCADBackgroundImage(image);
 
    //一次性定时器
    QTimer::singleShot(10, this, [=]() {
        slotViewZoomAuto();
    });
 
    return true;
}

到此这篇关于Qt利用ImageWatch实现图片查看功能的文章就介绍到这了,更多相关Qt ImageWatch图片查看内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++ 封装 DLL 供 C# 调用详细介绍

    C++ 封装 DLL 供 C# 调用详细介绍

    这篇文章主要介绍了C++ 封装 DLL 供 C# 调用(以C# 调用C++ 二次封装的VLC播放库为介质,支持回调函数的封装),需要的朋友可以参考下面我文章的具体内容
    2021-09-09
  • Qt实现部件透明及阴影效果的示例代码

    Qt实现部件透明及阴影效果的示例代码

    本文主要介绍了Qt实现部件透明及阴影效果的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Java C++题解leetcode1598文件夹操作日志搜集器

    Java C++题解leetcode1598文件夹操作日志搜集器

    这篇文章主要为大家介绍了Java C++题解leetcode1598文件夹操作日志搜集器示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • C++变量存储的生命周期与作用域实例代码精讲

    C++变量存储的生命周期与作用域实例代码精讲

    这篇文章主要介绍了C++变量存储的生命周期与作用域,从创建到消亡的完整过程,例如人从出生到死亡的整个过程就是一个生命周期。本文将通过示例为大家详细讲讲,感兴趣的可以学习一下
    2022-10-10
  • C++使用join拼接字符串的技巧

    C++使用join拼接字符串的技巧

    在C++中,经常需要将多个字符串拼接成一个大字符串,这个过程很容易出错,但有一些技巧可以帮助我们轻松地实现这个目标,五个C++中join字符串的技巧:使用stringstream、使用字符串迭代器、使用字符串的加法运算符、使用std::accumulate函数和使用boost库的join方法
    2023-11-11
  • C/C++判断传入的UTC时间是否当天的实现方法

    C/C++判断传入的UTC时间是否当天的实现方法

    在项目中经常会显示一个时间,如果这个时间在今日内就显示为时分秒,否则显示为年月日,有需要的朋友可以参考一下
    2014-01-01
  • c++ Qt信号槽原理

    c++ Qt信号槽原理

    这篇文章主要介绍了c++ Qt信号槽原理的相关资料,帮助大家更好的理解和使用c++,感兴趣的朋友可以了解下
    2021-02-02
  • VC++实现选择排序算法简单示例

    VC++实现选择排序算法简单示例

    这篇文章主要介绍了VC++实现选择排序算法简单示例,代码简洁易懂,有助于读者对数据结构与算法的学习,需要的朋友可以参考下
    2014-08-08
  • C++中String增删查改模拟实现方法举例

    C++中String增删查改模拟实现方法举例

    这篇文章主要给大家介绍了关于C++中String增删查改模拟实现方法的相关资料,String是C++中的重要类型,程序员在C++面试中经常会遇到关于String的细节问题,甚至要求当场实现这个类,需要的朋友可以参考下
    2023-11-11
  • C语言实现进程间通信原理解析

    C语言实现进程间通信原理解析

    这篇文章主要介绍了C语言实现进程间通信原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06

最新评论