C# 第九章『图形、图像』◆第4节:彩色图像处理

news/2024/4/28 14:43:04/文章来源:https://blog.csdn.net/qq_45336030/article/details/126982501

         一、彩色图像变换灰度图像

        1、彩色位图图像的颜色

        图像像素的颜色由三种基本色,即红R、绿G、蓝B,称为三基色。每种基色可取0-255(占用8个位,即1个字节),因此一个像素的颜色可以由三基色可组合成1677万种颜色(255*255*255)。

R值G值B值
25500
00255
绿02550
2552550
0255255
品红2550255
255255255
000

        2、彩色图像颜色的值的获取

        在使用C#系统处理彩色图像时,使用Bitmap类的GetPixel方法获取图像上指定像素的颜色值。

Color c1 = new Color();
c1 = box1.GetPixel(i,j);

        其中,(i,j)为像素的坐标位置。GetPixel方法取得指定位置的颜色值并返回一个长整型的整数。像素颜色值c1是一个长整型的数值,占4个字节,最上位字节的值为0,其他三个下位字节依次为B、G、R,值为0-255。

        比如:Bitmap.GetPixel(Int32, Int32) 方法

        3、彩色位图颜色值分解

        从c1值中分解出的R、G、B值可以直接使用:

Color c1 = new Color();
c1 = box1.GetPixel(i,j);
r = c1.R;
g = c1.G;
b = c1.B;

        4、图像像素颜色的设定

        设置像素可使用SetPixel方法。

Color c1 = Color.FromArgb(r,g,b);
//Color.FromArgb基于一个 32 位 ARGB 值创建 Color 结构。
Box2.SetPixel(i,j,c1);

        比如:Bitmap.SetPixel(Int32, Int32, Color) 方法 

           5、示例

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace _20220922_1
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){OpenFileDialog ofd1 = new OpenFileDialog();//打开文件对话框ofd1.Filter = "BMP|*.png";//定义选择的文件格式if(ofd1.ShowDialog() == DialogResult.OK)//如果成功打开文件对话框{Bitmap image1 = new Bitmap(ofd1.FileName);pictureBox1.Image = image1;//显示图像}}private void button2_Click(object sender, EventArgs e){Color c1 = new Color();Bitmap box1 = new Bitmap(pictureBox1.Image);//Bitmap box2 = new Bitmap(pictureBox1.Image);int r, g, b, c2;for (int i= 0;i<pictureBox1.Image.Width;i++){for(int j=0;j<pictureBox1.Image.Height;j++){c1 = box1.GetPixel(i,j);r = c1.R;g = c1.G;b = c1.B;c2 = (int)((r+g+b)/3);if (c2 < 0)c2 = 0;if (c2 > 255)c2 = 255;Color c11 = Color.FromArgb(c2, c2, c2);//将整形转换为颜色值box2.SetPixel(i, j, c11);//将新的值,逐步输入到box2中}pictureBox2.Refresh();//Control.Refresh 方法,强制控件使其工作区无效并立即重绘自己和任何子控件。pictureBox2.Image = box2;}}}
}

        二、图像的模糊化处理

        图象分辨率(ImageResolution):指图象中存储的信息量。这种分辨率有多种衡量方法,典型的是以每英寸的像素数(PPI)来衡量。图象分辨率和图象尺寸(高宽)的值一起决定文件的大小及输出的质量,该值越大图形文件所占用的磁盘空间也就越多。图象分辨率以比例关系影响着文件的大小, 即文件大小与其图象分辨率的平方成正比。如果保持图象尺寸不变,将图象分辨率提高一倍,则其文件大小增大为原来的四倍。 

         马赛克的原理就是将原图像分成4×4(或其他)像素的子图像块,该4×4像素子图像块的所有像素的颜色按F(i,j)的颜色来进行设定,达到降低分辨率的目的。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace _20220922_1
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){OpenFileDialog ofd1 = new OpenFileDialog();//打开文件对话框ofd1.Filter = "BMP|*.png";//定义选择的文件格式if(ofd1.ShowDialog() == DialogResult.OK)//如果成功打开文件对话框{Bitmap image1 = new Bitmap(ofd1.FileName);pictureBox1.Image = image1;//显示图像}}private void button2_Click(object sender, EventArgs e){Color c1 = new Color();Bitmap box1 = new Bitmap(pictureBox1.Image);Bitmap box2 = new Bitmap(pictureBox1.Image);int size, k1, k2, xres, yres;xres = pictureBox1.Image.Width;yres = pictureBox1.Image.Height;size = 8;for(int i = 0; i <= xres-1; i += size){for(int j = 0; j <= yres-1; j += size){c1 = box1.GetPixel(i, j);for(k1 = 0; k1 <= size-1; k1++){for(k2 = 0; k2 <= size-1; k2++){if (i + k1 < pictureBox1.Image.Width && j + k2 < pictureBox1.Image.Height)box2.SetPixel(i + k1, j + k2, c1);}}}pictureBox2.Refresh();pictureBox2.Image = box2;}}}
}

        三、灰度图像处理

        对图像像素的处理,可以达到灰度、对比度调节的效果。根据特定的输入输出灰度转换关系,可增强图像灰度,处理后图像的中等灰度值增大,图像变亮。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace _20220922_1
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){OpenFileDialog ofd1 = new OpenFileDialog();//打开文件对话框ofd1.Filter = "BMP|*.png";//定义选择的文件格式if(ofd1.ShowDialog() == DialogResult.OK)//如果成功打开文件对话框{Bitmap image1 = new Bitmap(ofd1.FileName);pictureBox1.Image = image1;//显示图像}}private void button2_Click(object sender, EventArgs e){Color c1 = new Color();Bitmap box1 = new Bitmap(pictureBox1.Image);Bitmap box2 = new Bitmap(pictureBox1.Image);int rr,m,lev,wid;int[] lut = new int [256];int[,,]pic = new int[700,700,3];double dm;lev = 5;//设置灰度值wid = 180;//设置对比度值for (int x = 0; x<256;x +=1){lut[x]=255;}for(int x = lev; x < (lev+wid); x++){dm = ((double)(x-lev)/(double)wid) * 255f;lut[x] = (int)dm;}for(int i = 0;i<pictureBox1.Image.Width-1;i++){for(int j = 0;j<pictureBox1.Image.Height-1;j++){c1 = box1.GetPixel(i,j);m = (int)((c1.R+c1.G+c1.B)/3);rr = lut[m];Color c2 = Color.FromArgb(rr,rr,rr);box2.SetPixel(i,j,c2);}}pictureBox2.Refresh();pictureBox2.Image = box2;}}}

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

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

相关文章

解决Syntax Error: Error: No ESLint configuration found Syntax Error: TypeError: eslint.CLIEngine i问题

1.在项目中安装 ESLint :npm install eslint --save-dev 2.生成配置文件:./node_modules/.bin/eslint --init 3.初始化成功后,会在项目根目录生成一个 .eslintrc.js 文件,文件内容: module.exports = { "env": { "browser": true, "es2021"…

你不知道的 JavaScript ----作用域

编译原理 在传统编译语言的流程中&#xff0c;程序中的一段源代码在执行之前会经历三个步骤&#xff0c;统称为编译&#xff1a; 1.分词 / 词法分析&#xff1a;将字符串分解成有意义的代码块&#xff0c;这些代码块被称为词法单元&#xff08;token&#xff09; var a 2; …

由《羊了个羊》想到的高并发架构之路

由《羊了个羊》为话题切入点,结合自己的面试经历,详细讲解了高并发架构设计的演进过程!前言要说最近一段时间最火的话题是什么,那必定是《羊了个羊》,频频冲上微博热搜第一。因访问量骤增,大量玩家涌入进来,高并发流量导致游戏服务器被接连击穿。《羊了个羊》服务器几天…

【复习】maven

1.maven的概述 1.2 为什么需要maven 环境的构建 清理&#xff1a;删除上一次构建的结果&#xff0c;为下一次构建做好准备编译&#xff1a;Java源程序编译成*.class字节码文件测试&#xff1a;运行提前准备好的测试程序报告&#xff1a;针对刚才测试的结果生成一个全面的信息…

MQ 消息队列时如何确保消息不丢失

面试官在面试候选人时,如果发现候选人的简历中写了在项目中使用了 MQ 技术(如 Kafka、RabbitMQ、RocketMQ),基本都会抛出一个问题:在使用 MQ 的时候,怎么确保消息 100% 不丢失? 这个问题在实际工作中很常见,既能考察候选者对于 MQ 中间件技术的掌握程度,又能很好地区分…

大数据开发!Pandas转spark无痛指南!

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; 大数据技术◉技能提升系列&#xff1a;https://www.showmeai.tech/tutorials/84 &#x1f4d8; 数据分析实战系列&#xff1a;https://www.showmeai.tech/tutorials/40 &#x1f4d8; 本文地址&#xff1a;https:/…

Runc 漏洞(CVE-2021-30465)离线修复

文章目录前言一、漏洞详情二、修复步骤2.1 下载离线包2.2 检查runc版本2.3 查看runc安装路径2.4 备份runc2.5 替换二进制文件2.6 检查版本前言 runC 是 Docker&#xff0c;Kubernetes 等依赖容器的应用程序的底层容器运行时。此次爆出的严重安全漏洞可使攻击者以 root 身份在主…

java并发编程学习六——乐观锁CAS

文章目录一、CAS原理1.1 无锁保护共享变量1.1.1 不安全模式实现1.1.2 有锁安全实现1.1.3 无锁安全实现1.2 cas工作方式1.3 CAS的效率和特点二、原子整数三、原子引用3.1 AtomicReference3.2 ABA问题3.3 AtomicMarkableReference四、原子累加器一、CAS原理 CAS全称CompareAndSe…

【C++学习】C++入门知识(上)

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《C学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 到这里&#xff0c;本喵的C语言学习暂时就告一段落了&#xff0c;开始C的学习了&#xff0c;同样的&a…

Ubuntu安装opencv4(c++)遇到的问题及解决方法

安装教程&#xff0c;参考 Ubuntu 18.04安装c版OpenCV4 问题&#xff11;&#xff1a;opencv无法下载IPPICV的问题 ippicv_2020_lnx_intel64_20191018_general.tgz 解决办法&#xff1a;解决编译opencv时&#xff0c;卡在IPPICV: Download: ippicv_2020_lnx_intel64_20191018…

hive开启自动转化common join和map join 带来的问题

背景&#xff1a; 我们采用的hive版本是3.1.2属于较新版本&#xff0c;此版本下hive本身默认开启map join 相关配置 hive默认开启map join&#xff0c;涉及的配置如下&#xff1a; hive.auto.convert.jointrue错误分析 错误发生在我们使用曝光转化明细宽表和素材维表进行j…

Bunifu UI WinForms 6.0.1 Crack

现代强大的设计元素 无论您是设计简单的 UI 还是需要高级用户界面和用户体验控件和组件&#xff0c;Bunifu 框架都配备了实现任何现代设计所需的一切。 用户界面和用户体验 您可以设计的内容没有限制 画廊 通过 Bunifu Rating 从您的应用中获取反馈 画廊 使用 Bunifu 面板…

【初学者入门C语言】之while、do-while、break及continue语句(五)

个人主页&#xff1a;天寒雨落的博客_CSDN博客-python,c,安装教程领域博主 &#x1f4ac; 刷题网站&#xff1a;一款立志于C语言的题库网站蓝桥杯ACM训练系统 - C语言网 (dotcpp.com) 特别标注&#xff1a;该博主将长期更新c语言内容&#xff0c;初学c语言的友友们&#xff0…

javascript: 复制对象时的深拷贝及浅拷贝(chrome 105.0.5195.125)

一,js代码<html> <head><meta charset="utf-8"/><title>测试</title> </head> <body><button onclick="assign()">无效:变量直接赋值</button><br/><br/><br/><button oncli…

Android 资源文件存放位置 Drawable 与 Mipmap 区别

Drawable Drawable 文件夹存储 bitmap 文件(png, jpeg, gif)、9-patch 文件 和 xml 文件&#xff0c;这些文件用于描述包含多种状态 (normal, pressed, focused) 的可绘制形状或可绘制对象。 android 的 drawable 文件一共可以有&#xff1a; drawable-ldpi (低密度) drawable-…

如何根治 Script Error.

作者&#xff1a;卢峰&#xff08;清锐&#xff09; 本文简要介绍了 Script Error 问题的来龙去脉&#xff0c;但也不局限于 Script Error&#xff0c;对于通用的系统性问题&#xff0c;应该找到系统性解决方案&#xff0c;进而治标治本。 Script Error 原因与当前解法 受浏览…

第一个spring项目

第一个spring项目 1、maven依赖导入 <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.22</version> </dependency> <dependency><groupId>junit</gro…

计算机毕设源码网站基于SpringBoot的阳光线上交友系统

&#x1f345;文末获取联系&#x1f345; 目录 一、项目介绍 二、开题报告 三、截图 四、源码获取 一、项目介绍 基于SpringBoot的阳光线上交友系统-计算机毕设java毕业设计项目源码-可定制-IT实战课堂_哔哩哔哩_bilibili项目资料网址: http://www.itszkt.com毕业设计…

Python 内存管理的工作原理你了解吗?

Python 为开发者提供了许多便利&#xff0c;其中最大的便利之一是其几乎无忧的内存管理。开发者无需手动为 Python 中的对象和数据结构分配、跟踪和释放内存。运行时会为你完成所有这些工作&#xff0c;因此你可以专注于解决实际问题&#xff0c;而不是争论机器级细节。 尽管如…

唯杰地图之前端CAD图GIS数据访问权限配置

前言 数字经济时代,数据要素的价值日益凸显,与之相应的,数据安全问题也越来越受到重视。唯杰地图 VJMAP为CAD图或自定义地图格式WebGIS可视化显示开发提供的一站式解决方案,支持的格式如常用的AutoCAD的DWG格式文件、GeoJSON等常用GIS文件格式,它使用WebGL矢量图块和栅格瓦…