Qt图像处理技术十一:得到QImage图像的马赛克图像

效果图

指数5在这里插入图片描述
指数15
在这里插入图片描述

指数40
在这里插入图片描述

原理

马赛克的原理很简单,就是取一个值,让这个值作为一个方格子的长宽,如40*40px的格子,取这个区域的平均R G B值,然后这个区域的所有像素点都是这个RGB值即可

源码

QImage applyMosaic(const QImage& oldImage, int blockSize) {if (oldImage.isNull() || blockSize <= 0) {return QImage(); // 返回空图片或处理错误}// 确保blockSize是偶数,并且不会使图像尺寸变得太小blockSize = (blockSize % 2 == 0) ? blockSize : blockSize + 1;if (oldImage.width() < blockSize || oldImage.height() < blockSize) {return oldImage; // 如果blockSize太大,直接返回原图}// 计算新图片的尺寸int newWidth = oldImage.width() / blockSize * blockSize;int newHeight = oldImage.height() / blockSize * blockSize;QImage newImage(newWidth, newHeight, oldImage.format());// 遍历每个块for (int y = 0; y < newHeight; y += blockSize) {for (int x = 0; x < newWidth; x += blockSize) {// 计算块的平均颜色QRgb averageColor = qRgb(0, 0, 0); // 初始化平均颜色为黑色int totalR = 0, totalG = 0, totalB = 0;int count = 0;for (int by = 0; by < blockSize && y + by < oldImage.height(); ++by) {for (int bx = 0; bx < blockSize && x + bx < oldImage.width(); ++bx) {QRgb pixel = oldImage.pixel(x + bx, y + by);totalR += qRed(pixel);totalG += qGreen(pixel);totalB += qBlue(pixel);++count;}}if (count > 0) { // 确保count不是0,避免除以0averageColor = qRgb(totalR / count, totalG / count, totalB / count);}// 用平均颜色填充整个块for (int by = 0; by < blockSize && y + by < newImage.height(); ++by) {for (int bx = 0; bx < blockSize && x + bx < newImage.width(); ++bx) {newImage.setPixel(x + bx, y + by, averageColor);}}}}return newImage;
}

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

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

相关文章

js平滑滚动元素使其可见

直接上重点&#xff1a; let xpath "//*/div[idxxx]"; document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.scrollIntoView({ behavior: "smooth"})这段代码是JavaScript中使用XPath查询文档并执行平…

力扣2968.执行操作使频率分数最大

力扣2968.执行操作使频率分数最大 方法一&#xff1a;滑窗 前缀和 求前缀和数组s 求一个数组补齐到中位数的差值 枚举右端点 class Solution {public:int maxFrequencyScore(vector<int>& nums, long long k) {int res0,n nums.size();sort(nums.begin(),nums…

27-unittest之断言(assert)

在测试方法中需要判断结果是pass还是fail&#xff0c;自动化测试脚本里面一般把这种生成测试结果的方法称为断言&#xff08;assert&#xff09;。 使用unittest测试框架时&#xff0c;有很多的断言方法&#xff0c;下面介绍几种常用的断言方法&#xff1a;assertEqual、assert…

Vue可视化表单设计 FcDesigner v3.1.0 发布,新增 12 个组件,支持事件配置等

FcDesigner 是一款可视化表单设计器组件。可以通过拖拽的方式快速创建表单&#xff0c;提高开发者对表单的开发效率&#xff0c;节省开发者的时间。 本项目采用 Vue 和 ElementPlus 进行页面构建&#xff0c;内置多语言解决方案&#xff0c;支持二次扩展开发&#xff0c;支持自…

GBDT的优势:为什么选择梯度提升决策树

GBDT的优势&#xff1a;为什么选择梯度提升决策树 在机器学习的众多算法中&#xff0c;GBDT&#xff08;Gradient Boosting Decision Tree&#xff0c;梯度提升决策树&#xff09;因其在各类回归和分类任务中的卓越表现而备受关注。GBDT不仅在各种竞赛中屡获佳绩&#xff0c;还…

【cmake】cmake cache

cmake cache是什么 cmake cache是cmake在配置好后生成的一个CMakeCache.txt的文件&#xff0c;里面存储了一堆变量&#xff0c;这些变量一般都是关于项目的配置和环境的。 比如你用的什么编译器&#xff0c;编译器选项&#xff0c;还有项目目录。 例如&#xff08;在cmakelist…

前端工程化工具系列(九)—— mddir(v1.1.1):自动生成文件目录结构工具

mddir 是一个基于项目目录结构动态生成 Markdown 格式目录结构的工具&#xff0c;方便开发者在文档中展示文件和文件夹的组织结构。 1. 安装 全局安装改工具&#xff0c;方便用于各个项目。 pnpm i -g mddir2. 使用 在想要生成目录接口的项目内打开命令行工具&#xff0c;输…

算法学习笔记——算法和数据结构简介

算法和数据结构简介 硬计算类算法&#xff1a; 精确求解大厂算法和数据结构笔试、面试题、acm比赛或者和acm形式类似的比赛&#xff0c;考虑的都是硬计算类算法但是某些问题使用硬计算类的算法&#xff0c;可能会让计算的复杂度较高 软计算类算法&#xff1a; 更注重逼近解…

结式的两种定义以及相等证明

【定理】 设 A ( x ) ∑ i 0 m a i x i B ( x ) ∑ i 0 n b i x i ∈ R [ x ] A(x) \sum_{i 0}^{m}{a_{i}x^{i}}\ \ \ \ \ \ \ \ \ \ \ \ \ B(x) \sum_{i 0}^{n}{b_{i}x^{i}}\mathcal{\ \ \ \ \ \ \ \ \ \ \ \ \in \ \ \ \ \ \ \ \ \ \ \ \ \ R}\lbrack x\rbrack A(x)…

CSS中inset属性详细讲解

CSS 中的 inset 属性是一种用于定位和调整非 static 定位元素的缩略属性。它是四个单独属性的简写&#xff0c;这些属性是 top、right、bottom 和 left。通过 inset 属性&#xff0c;可以同时设置这些属性的值&#xff0c;简化代码书写。 1.属性语法 inset 属性的语法如下&am…

太阳能航空障碍灯在航空安全发挥什么作用_鼎跃安全

随着我国经济的快速发展&#xff0c;空域已经成为经济发展的重要领域。航空运输、空中旅游、无人机物流、飞行汽车等经济活动为空域经济发展提供了巨大潜力。然而&#xff0c;空域安全作为空域经济发展的关键因素&#xff0c;受到了广泛关注。 随着空域经济活动的多样化和密集…

探索Sass:Web开发的强大工具

在现代Web开发中,CSS(层叠样式表)作为前端样式设计的核心技术,已经发展得非常成熟。然而,随着Web应用的复杂性不断增加,传统的CSS书写方式逐渐暴露出一些不足之处,如代码冗长、难以维护、缺乏编程功能等。为了解决这些问题,Sass(Syntactically Awesome Stylesheets)应…

VOJ 迷阵突围 题解 次短路径 dijkstra算法

迷阵突围 题目描述 小明陷入了坐标系上的一个迷阵&#xff0c;迷阵上有 n 个点&#xff0c;编号从 1 到 n 。小明在编号为 1 的位置&#xff0c;他想到编号为 n 的位置上。小明当然想尽快到达目的地&#xff0c;但是他觉得最短的路径可能有风险&#xff0c;所以他会选择第二短…

VL27 不重叠序列检测

这里最大的问题是&#xff1a; always (*) 和 always (posedge clk or negedge rst_n)的区别 always (*) 在当前时钟内会变化 always (posedge clk or negedge rst_n)由时钟驱动&#xff0c;所以会在下一个时钟才发生变化 代码 module sequence_detect(input clk,input rst_…

Waymo视角革新!MoST:编码视觉世界,刷新轨迹预测SOTA!

论文标题&#xff1a; MoST: Multi-modality Scene Tokenization for Motion Prediction 论文作者&#xff1a; Norman Mu, Jingwei Ji, Zhenpei Yang, Nate Harada, Haotian Tang, Kan Chen, Charles R. Qi, Runzhou Ge, Kratarth Goel, Zoey Yang, Scott Ettinger, Rami A…

Day34 事件聚合器实现消息过滤功能

​ 当前章节,实现了消息事件过滤功能 在上一章节中,我们发现在Login视图页和Main视图页都使用了同一个事件聚合器,导致在Login视图页发送的消息也被Main 视图主页所接收,这违反了事件传递的意图和模块化设计的原则。为了解决这个问题,我们需要为事件聚合器引入消息过滤的…

锁存器(Latch)的产生与特点

Latch 是什么 Latch 其实就是锁存器&#xff0c;是一种在异步电路系统中&#xff0c;对输入信号电平敏感的单元&#xff0c;用来存储信息。锁存器在数据未锁存时&#xff0c;输出端的信号随输入信号变化&#xff0c;就像信号通过一个缓冲器&#xff0c;一旦锁存信号有效&#…

深入解析Java中volatile关键字

前言 我们都听说过volatile关键字&#xff0c;也许大家都知道它在Java多线程编程编程中可以减少很多的线程安全问题&#xff0c;但是会用或者用好volatile关键字的开发者可能少之又少&#xff0c;包括我自己。通常在遇到同步问题时&#xff0c;首先想到的一定是加锁&#xff0…

大模型押题高考语文作文,带着大模型参加语文高考会怎么样?

前沿 大语言模型通常是指那些经过大量数据训练,能够理解和生成自然语言文本的人工智能系统。这些模型通常具有数百万到数十亿个参数,能够执行多种语言任务,例如语言翻译、文本摘要、问答系统、文本生成等。大语言模型能够捕捉语言的复杂性和细微差别,提供更加准确和自然的…

21data 数据可视化

echarts 快速上手 - 使用手册 - Apache ECharts 概念篇 图表容器及大小样式数据集数据转换坐标轴视觉映射图例 应用篇 常用图表类型 标签 python画图-matplotlib 21data 数据可视化 代码合集-CSDN博客 折线图 柱状图 雷达图 条形图 气泡图 折线堆积图 簇状柱形图