图像的缩放之c++实现(qt + 不调包)

1.基本原理

   图像的缩放一般使用插值算法,而本章将介绍两种常用插值算法:最临近插值法和双线性插值法

   1.最临近插值法

    将浮点数的位置坐标,进行四舍五入找到原图像的整型坐标即可,具体操作可见下面的公式,其中原图像坐标为(x, y),输出图像坐标为(i,j),比例系数为fx和fy。

    2.双线性插值法

     浮点数的位置坐标是由周围四个像素点来确定。具体公式可见下面,其中浮点数周围四个像素点的像素值分别为T1、T2、T3和T4,u和v分别表示浮点坐标距离左上角的横坐标差值和纵坐标差值。

2.代码实现(代码是我以前自学图像处理时写的,代码很粗糙没做任何优化,但很好理解

/*图像的缩放函数(最临近插值法),fx为水平缩放系数,fy为垂直缩放系数*/
QImage* MainWindow::ZoomNormal(QImage* image,double fx,double fy)
{unsigned int OutWidth = (unsigned int)(image->width() * fx + 0.5);unsigned int OutHeight = (unsigned int)(image->height() * fy + 0.5);QImage* newImage = new QImage(OutWidth, OutHeight ,QImage::Format_ARGB32);unsigned char* copyPixel = NULL;unsigned char* objPixel = NULL;int x = 0;int y = 0;long tempY;long tempJ;for (unsigned int  j = 0; j < OutHeight; j++){y = (int) (j / fy + 0.5);if (y >= image->height()){y --;}tempY = y * image->width() * 4;tempJ = j * OutWidth * 4;for(unsigned int i =0; i < OutWidth; i++){x = (int)(i / fx + 0.5);if (x >= image->width()){x --;}copyPixel = image->bits() + tempY + x * 4;objPixel = newImage->bits() + tempJ + i *4;memcpy(objPixel,copyPixel,4);}}return newImage;
}/*图像的缩放函数(双线性差值法),fx为水平缩放系数,fy为垂直缩放系数*/
QImage* MainWindow::ZooInterpolation(QImage* image,double fx,double fy)
{unsigned int OutWidth = (unsigned int)(image->width() * fx +0.5);unsigned int OutHeight = (unsigned int)(image->height() * fy +0.5 );QImage* newImage = new QImage(OutWidth, OutHeight ,QImage::Format_ARGB32);double  x = 0;double  y = 0;int r,g,b;for (unsigned int  j = 0; j < OutHeight- fy; j++) //    最后一行会溢出,所以去掉{y = j / fy  ;for(unsigned int i =0; i < OutWidth; i++){x = i / fx ;int x1, x2, y1, y2;x1= ( int)x;x2 = x1 + 1;y1 = ( int)y;y2 = y1 + 1;QColor oldcolor1;QColor oldcolor2;QColor oldcolor3;QColor oldcolor4;double u, v;u = x - x1;v = y - y1;if ((x >=image->width() - 1 ) && (y >=image->height() - 1 )){oldcolor1 = QColor(image->pixel(x1,y1));r = oldcolor1.red();g = oldcolor1.green();b = oldcolor1.blue();}else if (x >= image->width() - 1){oldcolor1 = QColor(image->pixel(x1,y1));oldcolor3 = QColor(image->pixel(x1,y2));r = oldcolor1.red() * (1 - v) + oldcolor3.red() * v;g = oldcolor1.green() * (1 - v) + oldcolor3.green() * v;b = oldcolor1.blue() * (1 - v) + oldcolor3.blue() * v;}else if (x >=image->height() - 1){oldcolor1 = QColor(image->pixel(x1,y1));oldcolor2 = QColor(image->pixel(x2,y1));r = oldcolor1.red() * (1 - u) + oldcolor2.red() * u;g = oldcolor1.green() * (1 - u) + oldcolor2.green() * u;b = oldcolor1.blue() * (1 - u) + oldcolor2.blue() * u;}else{oldcolor1 = QColor(image->pixel(x1,y1));oldcolor2 = QColor(image->pixel(x2,y1));oldcolor3 = QColor(image->pixel(x1,y2));oldcolor4 = QColor(image->pixel(x2,y2));int r1,g1,b1;r = oldcolor1.red() * (1 - u) + oldcolor2.red() * u;g = oldcolor1.green() * (1 - u) + oldcolor2.green() * u;b = oldcolor1.blue() * (1 - u) + oldcolor2.blue() * u;r1 = oldcolor3.red() * (1 - u) + oldcolor4.red() * u;g1 = oldcolor3.green() * (1 - u) + oldcolor4.green() * u;b1 = oldcolor3.blue() * (1 - u) + oldcolor4.blue() * u;r = r * (1 - v) + r1 * v;g = g * (1 - v) + g1 * v;b = b * (1 - v) + b1 * v;}newImage->setPixel(i, j, qRgb(r, g, b));}}return newImage;
}

3.参考资料

    数字图像处理——技术详解与Visual C++实践(左飞等著),写代码与写博客的时间相差两年,至于还参考其他的资料不,我已经忘记了,如若需要,我可以补上去

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/85932.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(docker)mysql镜像拉取-创建容器-容器的使用【个人笔记】

【容器的第一次创建】 容器的第一次创建&#xff0c;需要先下载镜像&#xff0c;从 镜像拉取 0、可以搜索镜像的版本 docker search mysql1、先拉取MySQL的镜像&#xff0c;默认拉取最新版&#xff0c;使用下面的命令拉取mysql镜像 docker pull mysql也可以指定mysql的版本…

如何快速解决集成环信IM遇到的问题?

1、环信FAQ频道发布了 环信FAQ帮助中心提供了各客户端、RESTful API、环信控制台以及商务相关的集成环信常见问题及解决方法&#xff0c;帮您快速解决集成问题 2、当我有问题时&#xff0c;从哪里进FAQ&#xff1f; 干脆收藏这个网址&#xff1a;https://faq.easemob.com/ 环…

iptables端口转发,wireshark抓包分析

app发送请求&#xff0c;到安全交互平台访问服务&#xff0c;app发送请求的ip地址是基站随机分配的&#xff0c;ip地址被拉黑了怎么访问&#xff1f;解决办法&#xff1f; 一开始考虑使用nginx作为代理服务器转发请求&#xff0c;后来在服务器用端口转发解决。 修改nginx配置文…

Flutter游戏引擎Flame系列笔记 - 1.Flame引擎概述

Flutter游戏引擎Flame系列笔记 1.Flame引擎概述 - 文章信息 - Author: 李俊才(jcLee95) Visit me at: https://jclee95.blog.csdn.netEmail: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/article/details/132119035 【介绍】…

Unity 3D中使用tilemap创建关卡地图,瓦片间隙有漏缝

我们使用一张图片来作为Sprite图集&#xff0c;创建地形图&#xff1a; 运行后&#xff0c;会发现&#xff0c;瓦片之间似乎总是有间距。 检查了图片发现&#xff0c;并不是图片边界存在间隙。 最后发现问题是出在图片资源中的线性过滤属性值&#xff1a; 在设计界面就能够看…

SpringBoot运行流程源码分析------阶段二(run方法核心流程)

run方法核心流程 在分析和学习整个run方法之前&#xff0c;我们可以通过以下流程图来看下SpringApplication调用的run方法处理的核心操作包含哪些。 从上面的流程图中可以看出&#xff0c;SpringApplication在run方法中重点做了以下几步操作 获取监听器和参数配置打印banner…

Cloud Studio实战——热门视频Top100爬虫应用开发

最近Cloud Studio非常火&#xff0c;我也去试了一下&#xff0c;感觉真的非常方便&#xff01;我就以Python爬取B站各区排名前一百的视频&#xff0c;并作可视化来给大家分享一下Cloud Studio&#xff01;应用链接&#xff1a;Cloud Studio实战——B站热门视频Top100爬虫应用开…

【数学】CF1514 C

Problem - 1514C - Codeforces 题意&#xff1a; 思路&#xff1a; Code&#xff1a; #include <bits/stdc.h>using i64 long long;constexpr int N 2e5 10; constexpr int M 2e5 10; constexpr int mod 998244353;void solve() {int n;std::cin >> n;std:…

lscpu的各个参数是什么意思?

$ lscpu Architecture: x86_64 #架构 CPU op-mode(s): 32-bit, 64-bit #运行方式 Byte Order: Little Endian #字节顺序 CPU(s): 96 #逻辑cpu数 On-line CPU(s) list: 0-95 #在线cpu Thread(s) per core: 2 #每个核包含线程…

HarmonyOS SDK开放能力,服务鸿蒙生态建设,打造优质应用体验

华为开发者大会2023&#xff08;HDC.Together&#xff09;于8月4日至6日在东莞松山湖举行&#xff0c;在HarmonyOS端云开放能力技术分论坛上&#xff0c;华为为广大开发者们介绍了HarmonyOS SDK开放能力在基础开发架构、功能特性等方面的变化之处&#xff0c;通过将常见的通用能…

LeetCode 1572. 矩阵对角线元素的和

【LetMeFly】1572.矩阵对角线元素的和 力扣题目链接&#xff1a;https://leetcode.cn/problems/matrix-diagonal-sum/ 给你一个正方形矩阵 mat&#xff0c;请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 示例 1&…

一个简单实用的线程池及线程池组的实现!

1.线程池简介 线程池&#xff0c;顾名思义&#xff0c;就是一个“池子”里面放有多个线程。为什么要使用线程池呢&#xff1f;当我们编写的代码需要并发异步处理很多任务时候&#xff0c;一般的处理办法是一个任务开启一个线程去处理&#xff0c;处理结束后释放线程。可是这样…

第四十八周周报

学习目标&#xff1a; 修改ViTGAN 学习内容&#xff1a; 位置编码和多尺度 学习时间&#xff1a; 8.5-8。12 学习产出&#xff1a; 这两周主要工作在修改ViTGAN的结构和代码&#xff0c;将相对位置编码加入ViTGAN并将生成器变为多尺度&#xff0c;由于匹配维度很困难&am…

maven的入门使用

maven的入门使用 1.Maven&#xff08;Maven Apache&#xff09;是一个流行的项目构建和管理工具&#xff0c;2.项目结构和POM文件&#xff1a;3.POM文件&#xff08;Project Object Model&#xff09;4.依赖管理&#xff1a; 在POM文件中5.生命周期和构建过程1.前言2.插件系统3…

Windows 编译CEF源码详细记录

背景 默认的CEF不支持音视频功能&#xff0c;需要下载源码将ffmpeg开关打开&#xff0c;再进行编译。 Linux编译参考&#xff1a; 《Linux CEF源码下载编译详细记录》 创建目录结构 code/automate/automate-git.py <-- CEF build scriptchromium_git/cef/ …

湘大 XTU OJ 1148 三角形 题解(非常详细):根据题意朴素模拟+观察样例分析需要计算几轮 具体到一般

一、链接 1148 三角形 二、题目 题目描述 给一个序列&#xff0c;按下面的方式进行三角形累加&#xff0c;求其和值。 比如序列为 1,2,3,4,5 1 2 3 4 53 5 7 98 12 1620 2848输入 有多组样例。每个样例的第一行是一个整数N(1≤N≤100),表示序列的大小&…

27.Netty源码之FastThreadLocal

highlight: arduino-light FastThreadLocal FastThreadLocal 的实现与 ThreadLocal 非常类似&#xff0c;Netty 为 FastThreadLocal 量身打造了 FastThreadLocalThread 和 InternalThreadLocalMap 两个重要的类。下面我们看下这两个类是如何实现的。 FastThreadLocalThread 是对…

0基础学习VR全景平台篇 第80篇:Insta360 影石如何直播推流

一、下载Insta360 Pro APP 1、手机进入Insta360官网Insta360 | Action Cameras | 360 Cameras | VR Cameras&#xff0c;页面往下滑动到Insta360 Pro2相机处&#xff0c;点击相机图片进入详情页。详情页继续下滑到到手机APP处&#xff0c;根据自己的手机系统选择对应的客户端进…

PhotoShop2023 Beta AI版安装教程

从 Photoshop 开始&#xff0c;惊艳随之而来​ 从社交媒体贴子到修饰相片&#xff0c;设计横幅到精美网站&#xff0c;日常影像编辑到重新创造 – 无论什么创作&#xff0c;Photoshop 都可以让它变得更好。​ Photoshop2023 Beta版本安装教程和软件下载 地址&#xff1a;点击…

dubbo之高可用

负载均衡 概述 负载均衡是指在集群中&#xff0c;将多个数据请求分散到不同的单元上执行&#xff0c;主要是为了提高系统的容错能力和对数据的处理能力。 Dubbo 负载均衡机制是决定一次服务调用使用哪个提供者的服务。 策略 在Dubbo中提供了7中负载均衡策略&#xff0c;默…