首页 > 其他分享 >qt c语言双三次线性插值

qt c语言双三次线性插值

时间:2024-01-05 20:47:02浏览次数:38  
标签:qt int QRgb float 线性插值 dx dy 三次

用chatgpt 生成的 测试了比较卡

   for (int y = 0; y < enlargedHeight; y++) {
                    for (int x = 0; x < enlargedWidth; x++) {
                        // 计算原始图像中对应的浮点坐标
                        float originalX = (float)x / (float)enlargedWidth * (float)originalWidth;
                        float originalY = (float)y / (float)enlargedHeight * (float)originalHeight;

                        // 进行双三次线性插值计算
                        QRgb interpolatedPixel = bicubicInterpolation(*img1, originalX, originalY);

                        // 将计算得到的像素值赋给新图像
                        newImg->setPixel(x, y, interpolatedPixel);
                    }
                }
// 原始图像大小
const int originalWidth = 32;
const int originalHeight = 24;

// 放大后的图像大小
const int enlargedWidth = 640;
const int enlargedHeight = 480;


// 双三次线性插值函数
QRgb bicubicInterpolation(const QImage& image, float x, float y) {
    // 计算四个最近的像素点的坐标
    int x1 = qFloor(x);
    int y1 = qFloor(y);
    int x2 = x1 + 1;
    int y2 = y1 + 1;

    // 计算插值权重
    float dx = x - x1;
    float dy = y - y1;

    // 获取四个最近的像素点的颜色值
    QRgb p11 = image.pixel(x1, y1);
    QRgb p12 = image.pixel(x1, y2);
    QRgb p21 = image.pixel(x2, y1);
    QRgb p22 = image.pixel(x2, y2);

    // 对四个像素点进行双三次线性插值计算
    float r = qRed(p11) * (1 - dx) * (1 - dy) + qRed(p21) * dx * (1 - dy) + qRed(p12) * (1 - dx) * dy + qRed(p22) * dx * dy;
    float g = qGreen(p11) * (1 - dx) * (1 - dy) + qGreen(p21) * dx * (1 - dy) + qGreen(p12) * (1 - dx) * dy + qGreen(p22) * dx * dy;
    float b = qBlue(p11) * (1 - dx) * (1 - dy) + qBlue(p21) * dx * (1 - dy) + qBlue(p12) * (1 - dx) * dy + qBlue(p22) * dx * dy;

    return qRgb(r, g, b);
}

标签:qt,int,QRgb,float,线性插值,dx,dy,三次
From: https://www.cnblogs.com/zhaocundang/p/17948042

相关文章

  • QT: Qt for MCU + PyQt6 to Android
    https://www.riverbankcomputing.com/static/Docs/PyQt6/https://www.qt.io/blog/taking-qt-for-python-to-androidhttps://github.com/shyamnathp/python-for-android/tree/pyside_supporthttps://www.qt.io/blog/qt-for-mcus-2.5.2-lts-releasedQtforMCUs2.5.2LTS(......
  • MQTT 客户端 MQTT.fx 使用说明
    下载官网:https://softblade.de/en/download-2/说明:最后的免费版本是MQTT.fx1.7.1,官网已经没有免费的版本下载MQTT.fx1.7.1https://nowjava.com/download/44364【需关注其公众号才能下载】安装一路Next即可使用安装好后,直接启动MQTT.fx点击第1步中界......
  • PythonQt简明教程
    PythonQt简明教程PythonQt是Qt框架的Python动态绑定,是一种将Python脚本语言嵌入C++Qt应用程序的简便方法。与PyQt、PySide不同,PythonQt侧重点在于将Python嵌入到现有的C++应用程序,而不是使用Python编写应用程序。接口PythonQt的主要接口通过PythonQt::self()单例提供,并由Pytho......
  • QProgressDialog用法及结合QThread用法,四种线程使用
    1QProgressDialog概述QProgressDialog类提供耗时操作的进度条。进度对话框用于向用户指示操作将花费多长时间,并演示应用程序没有冻结。此外,QPorgressDialog还可以给用户一个中止操作的机会。进度对话框的一个常见问题是很难知道何时使用它们;操作在不同的硬件上花费不同的时间......
  • mqtt 共享订阅简单说明
    mqtt是一个比较常用的iot协议,5.0支持共享订阅,共享订阅是一个特别方便的功能,可以实现业务的高可用,以及提升消息的处理参考格式共享订阅格式$share/{ShareName}/{TopicFilter}ShareName是一个共享名称,可以实现业务组的能力,TopicFilter}可以对于订阅消息的过滤处理参考玩法简......
  • 【Qt之Quick模块】7. Quick基础、常用组件Item、Rectangle、Text、TextInput、TextEdi
    1.概述QtQuick模块是编写QML应用程序的标准库。QtQML模块提供QML引擎和语言基础结构,QtQuick模块提供用QML创建用户界面所需的所有基本类型。它提供了一个可视化画布,包括用于创建和动画化可视化组件、接收用户输入、创建数据模型和视图以及延迟对象实例化的类型。QtQuick模块......
  • STM32MP157D-DK1开发板Qt镜像构建
    上篇介绍了STM32MP57-DK1开发板官方系统的烧录。那个系统包含Linux系统的基础功能,如果要进行Qt开发,还需要重新构建带有Qt功能的镜像本篇就来介绍如何构建带有Qt功能的系统镜像,并在开发板中烧录构建的镜像。1Distribution包的构建STM32微处理器平台的STM32MPU嵌入式软件发行版支持......
  • 【Qt之Quick模块】6. QML语法详解_3 QML对象特性
    概述每一个QML对象类型都包含一组已定义的特性。当进行实例时都会包含一组特性,这些特性是在对象类型中定义的。一个QML文档中的对象类型声明了一个新的类型,即实例出一个类型。其中包含以下特性。theidattribute :id特性propertyattributes :属性特性signalattributes ......
  • 安装PyQt5
    1.在命令窗口中输入下面两个命令:pipinstallpyqt5pipinstallpyqt5-tools2.打开PyCharm的File->Settings->Tools->ExternalTools,单击Add,在弹出的窗口中输入:Name:QtDisignerProgram:E:\anaconda3\Lib\site-packages\qt5_applications\Qt\bin\designer.exeW......
  • 基于QT开发的温室气体数据记录软件
    1、概述  温室气体分析仪数据记录软件用于实现温室气体分析仪数据的获取与存储,阀箱数据的获取与存储、冷阱数据的获取与存储、采样单元数据的获取与存储、阀箱和采样单元的远程操作以及系统功能的管理。其主操作界面如下:  上述软件界面分为2各区域,左侧是树形目录为系统操作......