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

2024-06-03 17:28

本文主要是介绍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;
}

这篇关于Qt图像处理技术十一:得到QImage图像的马赛克图像的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1027629

相关文章

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

Qt如何实现文本编辑器光标高亮技术

《Qt如何实现文本编辑器光标高亮技术》这篇文章主要为大家详细介绍了Qt如何实现文本编辑器光标高亮技术,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录实现代码函数作用概述代码详解 + 注释使用 QTextEdit 的高亮技术(重点)总结用到的关键技术点应用场景举例示例优化建议

Qt 设置软件版本信息的实现

《Qt设置软件版本信息的实现》本文介绍了Qt项目中设置版本信息的三种常用方法,包括.pro文件和version.rc配置、CMakeLists.txt与version.h.in结合,具有一定的参考... 目录在运行程序期间设置版本信息可以参考VS在 QT 中设置软件版本信息的几种方法方法一:通过 .pro

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

Qt之QMessageBox的具体使用

《Qt之QMessageBox的具体使用》本文介绍Qt中QMessageBox类的使用,用于弹出提示、警告、错误等模态对话框,具有一定的参考价值,感兴趣的可以了解一下... 目录1.引言2.简单介绍3.常见函数4.按钮类型(QMessage::StandardButton)5.分步骤实现弹窗6.总结1.引言