pset4filter less: helpers.c

(4)blur function

  • 简单画图熟悉一下要做什么
    在这里插入图片描述
  • 可以看到3种情况,顶格,边界,里面
  • 如果分开算的话,是真的麻烦;但是当时还真的没有想到更好的,就先写一写(此处摘取3处)
  • 外部都是 for (int i = 0; i < height; i++) { 下边省去不写 for (int j = 0; j < width; j++) { } }

里面

int sumRed = 0,sumGreen = 0,sumBlue = 0;//set 3 conditions by the limit//!前面1部分//计算9个格子if (i > 0 && i < height - 1 && j > 0 && j < width - 1) {for (int k = -1; k <= 1; k++) {for (int m = -1; m <= 1; m++) {sumRed += copy[i + k][j + m].rgbtRed;sumGreen += copy[i + k][j + m].rgbtGreen;sumBlue += copy[i + k][j + m].rgbtBlue;}}//after sum it all and give that value to imageimage[i][j].rgbtRed = round(sumRed / 9.0);image[i][j].rgbtGreen = round(sumGreen / 9.0);image[i][j].rgbtBlue = round(sumBlue / 9.0);
}

顶格

//1.1 左上角 i + j +sumRed = 0, sumGreen = 0, sumBlue = 0;if (j == 0 && i == 0) {for (int k = 0; k <= 1; k++) {for (int m = 0; m <= 1; m++) {sumRed += copy[i + k][j + m].rgbtRed;sumGreen += copy[i + k][j + m].rgbtGreen;sumBlue += copy[i + k][j + m].rgbtBlue;}}//after sum it all and give that value to imageimage[i][j].rgbtRed = round(sumRed / 4.0);image[i][j].rgbtGreen = round(sumGreen / 4.0);image[i][j].rgbtBlue = round(sumBlue / 4.0);}

边界

    //2.1上边界:移动的方向只有下(高度-1)k +,左边m -,右边m+sumRed = 0, sumGreen = 0, sumBlue = 0;if (i == 0) {//计算RGB利用双循环(k,m)for (int k = 0; k <= 1; k++) {for (int m = -1; m <= 1; m++) {sumRed += copy[i + k][j + m].rgbtRed;sumGreen += copy[i + k][j + m].rgbtGreen;sumBlue += copy[i + k][j + m].rgbtBlue;}}image[i][j].rgbtRed = round(sumRed / 6.0);image[i][j].rgbtGreen = round(sumGreen / 6.0);image[i][j].rgbtBlue = round(sumBlue / 6.0);}

简化

  • 然后可以看到很多重复的地方,需要开始统一,找到不同的地方4,6,9,然后里层的双循环k,m其实也可以合并,
  • 只要移动之后的index在范围里面就可以了,里层循环的次数加上限定的条件计算count,然后一步步开始删减…
// Blur image
void blur(int height, int width, RGBTRIPLE image[height][width])
{// copy the image[height][width]RGBTRIPLE copy[height][width];for (int i = 0; i < height; i++){for (int j = 0; j < width; j++){copy[i][j] = image[i][j];}}int sumRed = 0, sumGreen = 0, sumBlue = 0, count = 0;// set 3 conditions by the limitfor (int i = 0; i < height; i++){for (int j = 0; j < width; j++){for (int k = -1; k <= 1; k++){for (int m = -1; m <= 1; m++){// condition limit boundaryif (i + k >= 0 && i + k <= height - 1 && j + m >= 0 && j + m <= width - 1){sumRed += copy[i + k][j + m].rgbtRed;sumGreen += copy[i + k][j + m].rgbtGreen;sumBlue += copy[i + k][j + m].rgbtBlue;count++;}}}// after sum it all and give that value to image//before calculating the results,first convert it to float!image[i][j].rgbtRed = round((float) sumRed / count);image[i][j].rgbtGreen = round((float) sumGreen / count);image[i][j].rgbtBlue = round((float) sumBlue / count);// clear it and for next roundsumRed = 0, sumGreen = 0, sumBlue = 0, count = 0;}}
}

问题

这里要在计算之前,把int sumRGB值转化成float类型

image[i][j].rgbtRed = round((float) sumRed / count);

而不是float(计算之后的值),这样就把小数点之后的都丢了

image[i][j].rgbtRed = round((float)( sumRed / count));

总结

刚开始的时候想不到简洁的方法或者不太理解,先慢慢写出来,能运行就可以。
后面再去优化,一步一步来,不需要太大压力

check

:) helpers.c exists
:) filter compiles
:) grayscale correctly filters single pixel with whole number average
:) grayscale correctly filters single pixel without whole number average
:) grayscale leaves alone pixels that are already gray
:) grayscale correctly filters simple 3x3 image
:) grayscale correctly filters more complex 3x3 image
:) grayscale correctly filters 4x4 image
:) sepia correctly filters single pixel
:) sepia correctly filters simple 3x3 image
:) sepia correctly filters more complex 3x3 image
:) sepia correctly filters 4x4 image
:) reflect correctly filters 1x2 image
:) reflect correctly filters 1x3 image
:) reflect correctly filters image that is its own mirror image
:) reflect correctly filters 3x3 image
:) reflect correctly filters 4x4 image
:) blur correctly filters middle pixel
:) blur correctly filters pixel on edge
:) blur correctly filters pixel in corner
:) blur correctly filters 3x3 image
:) blur correctly filters 4x4 image

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

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

相关文章

【java】规则引擎

Java 规则引擎&#xff1a;Easy Rules 简介 优点 通过 Easy Rules 引入规则引擎的主要优点是解耦业务规则和代码逻辑&#xff1a; 无需修改代码&#xff0c;只需更新数据库中的规则即可。提供灵活、可扩展和可维护的方式处理复杂业务逻辑。 规则定义 Easy Rules 支持多种形…

满足你的个性化需求!ChatGLM4 模型微调教程

一、 大模型 ChatGLM4 简介 GLM-4-9B 是智谱 AI 推出的最新一代预训练模型 GLM-4 系列中的开源版本。 在语义、数学、推理、代码和知识等多方面的数据集测评中&#xff0c; GLM-4-9B 及其人类偏好对齐的版本 GLM-4-9B-Chat 均表现出超越 Llama-3-8B 的卓越性能。 除了能进行多…

TCP基础了解

什么是 TCP &#xff1f; TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。 面向连接&#xff1a;一定是「一对一」才能连接&#xff0c;不能像 UDP 协议可以一个主机同时向多个主机发送消息&#xff0c;也就是一对多是无法做到的&#xff1b; 可靠的&#xff1a;无论…

Altair: 轻松创建交互式数据可视化

Altair: 轻松创建交互式数据可视化 Altair 是一个基于 Vega-Lite 的 Python 数据可视化库&#xff0c;它旨在简化数据可视化的创建过程&#xff0c;尤其适用于统计图表的生成。Altair 强调声明式编码方式&#xff0c;通过简单的语法&#xff0c;用户能够快速创建复杂的交互式图…

conda-pack迁移虚拟环境

conda-pack打包迁移环境 源机器上&#xff1a; # 创建并激活环境 conda create --name myenv python3.8 conda activate myenv# 安装所需包 conda install numpy pandas# 打包环境 conda install -c conda-forge conda-pack conda pack -n myenv -o myenv.tar.gz 目标机器上&a…

paddle

paddlepaddle 安装环境 查看虚拟环境 创建一个名叫paddle的虚拟环境 conda env list conda create -n paddle python3.8激活 conda activate paddle打开paddlepaddle官网 选择windowcondacpu复制代码 conda install paddlepaddle2.6.2 --channel https://mirrors.tuna.tsi…

如何测量分辨率

一、什么是分辨率&#xff1f; 分辨率指的是分清物体细节的能力。分辨率是一个成像系统还原空间频率的能力。一些人只是简单的用分辨率去描述极限分辨率&#xff0c;但是相机在在不同的对比度的情况下还原低&#xff0c;中和高频率的能力&#xff0c;也可以显示全面综合的信息。…

API开发:Flask VS FastAPI

在当今的Web开发领域&#xff0c;选择合适的框架对于构建高效、稳定且易于维护的API至关重要。Flask和FastAPI是两个备受关注的Python Web框架&#xff0c;它们各自具有独特的特点和优势&#xff0c;适用于不同的开发场景。 文章目录 一、简介二、性能表现三、开发效率&#xf…

HCIA-Access V2.5_4_1_1路由协议基础_IP路由表

大型网络的拓扑结构一般会比较复杂&#xff0c;不同的部门&#xff0c;或者总部和分支可能处在不同的网络中&#xff0c;此时就需要使用路由器来连接不同的网络&#xff0c;实现网络之间的数据转发。 本章将介绍路由协议的基础知识、路由表的分类、静态路由基础与配置、VLAN间…

气象与旅游之间的关系,如果借助高精度预测提高旅游的质量

气象与旅游之间存在密切的关系,天气条件直接影响旅游者的出行决策、旅游体验和安全保障。通过高精度气象预测技术,可以有效提升旅游质量,为游客和旅游行业带来显著的优势。 1. 提高游客出行决策效率 个性化天气服务:基于高精度气象预测,旅游平台可以提供个性化的天气预报服…

【计算机视觉基础CV】03-深度学习图像分类实战:鲜花数据集加载与预处理详解

本文将深入介绍鲜花分类数据集的加载与处理方式&#xff0c;同时详细解释代码的每一步骤并给出更丰富的实践建议和拓展思路。以实用为导向&#xff0c;为读者提供从数据组织、预处理、加载到可视化展示的完整过程&#xff0c;并为后续模型训练打下基础。 前言 在计算机视觉的深…

第一次面试到第一份offer的经历分享

更多大厂面试经验的视频经验分享看主页 目录: 话不多说&#xff0c;进入正题 从去年九月份开始面试 到现在第一份offer中间经历了大概5个月的时间 我会将我面试过的公司跟一些比较经典的问题分享出来 公司&#xff1a; 1.360 2.奇安信: 3.安询 4.安腾信息技术公司 5.深思科技…

数据结构之线性表1

2.1 线性表的定义和基本操作 1.线性结构的特点是&#xff1a;在数据元素的非空有限集中&#xff0c; &#xff08;1&#xff09;存在惟一的一个被称做“第一个”的数据元素&#xff1b; &#xff08;2&#xff09; 存在惟一的一个被称做“最后一个”的数据元素&#xff1b; &a…

信息安全实训室网络攻防靶场实战核心平台解决方案

一、引言 网络安全靶场&#xff0c;作为一种融合了虚拟与现实环境的综合性平台&#xff0c;专为基础设施、应用程序及物理系统等目标设计&#xff0c;旨在向系统用户提供全方位的安全服务&#xff0c;涵盖教学、研究、训练及测试等多个维度。随着网络空间对抗态势的日益复杂化…

关于分页的样式问题

在最近写网页的时候遇到了一个关于样式的问题&#xff0c;今天我来跟大家来说一下。像是分页中的颜色效果&#xff0c;斑马纹颜色要注意颜色不要过于深。 这种的颜色就有一点深看着很不舒服&#xff0c;应将当前的颜色改为淡一点的&#xff0c;也可以利用rgba调整透明度&#x…

一分钟快速了解什么是AEO海关认证

一分钟快速了解什么是AEO海关认证——这一术语&#xff0c;对于国际贸易领域的从业者而言&#xff0c;无疑是一个充满分量与价值的标签。AEO&#xff0c;即“Authorized Economic Operator”&#xff0c;中文译为“经认证的经营者”&#xff0c;是海关对信用状况、守法程度和安…

在Ubuntu中配置mysql,并允许外部访问数据库

在虚拟机中安装 MySQL 并允许外部访问&#xff0c;可以按照以下步骤操作&#xff1a; 1. 更新系统包 首先&#xff0c;确保你的系统是最新的&#xff0c;使用以下命令更新包列表&#xff1a; sudo apt update sudo apt upgrade2. 安装 MySQL Server 安装 MySQL 服务&#x…

Python图注意力神经网络GAT与蛋白质相互作用数据模型构建、可视化及熵直方图分析...

全文链接&#xff1a;https://tecdat.cn/?p38617 本文聚焦于图注意力网络GAT在蛋白质 - 蛋白质相互作用数据集中的应用。首先介绍了研究背景与目的&#xff0c;阐述了相关概念如归纳设置与转导设置的差异。接着详细描述了数据加载与可视化的过程&#xff0c;包括代码实现与分析…

Java学习笔记(13)——面向对象编程

面向对象基础 目录 面向对象基础 方法重载 练习&#xff1a; 继承 继承树 protected super 阻止继承 向上转型 向下转型 区分继承和组合 练习 小结&#xff1a; 方法重载 如果有一系列方法&#xff0c;功能类似&#xff0c;只是参数有所不同&#xff0c;就可以把…

线性池学习

一、什么是进程&#xff1f;什么是线程&#xff1f; 1. 进程的定义 从操作系统的角度解释&#xff1a; 进程是操作系统分配资源和调度执行的基本单位。每个进程都是操作系统中一个独立的实体&#xff0c;拥有自己的内存空间、文件描述符、代码、数据等资源。进程是程序在执行…