17.3.2.5 灰度(内存处理)

2024-02-16 16:04
文章标签 内存 处理 2.5 17.3 灰度

本文主要是介绍17.3.2.5 灰度(内存处理),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

灰度的算法请参看第17.3.1.3节。17.3.1.3 灰度-CSDN博客

【例 17.43灰度算法一:最大值法。

       //灰度:最大值private void btnGray1_Click(object sender, EventArgs e){Bitmap destImg = new Bitmap(sourceImg.Width, sourceImg.Height);BitmapData sourceData = sourceImg.LockBits(new Rectangle(0, 0, sourceImg.Width, sourceImg.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);BitmapData destData = destImg.LockBits(new Rectangle(0, 0, sourceImg.Width, sourceImg.Height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);IntPtr pSource = sourceData.Scan0;int allBytes = sourceData.Stride * sourceData.Height;byte[] rgbvalues = new byte[allBytes];Marshal.Copy(pSource, rgbvalues, 0, allBytes);int pos = 0;int R, G, B;int avgValue;for (int j = 0; j < sourceData.Height; j++){for (int i = 0; i < sourceData.Width; i++){B = rgbvalues[pos];G = rgbvalues[pos + 1];R = rgbvalues[pos + 2];byte MaxColor;MaxColor =(byte)( R > G? R: G);MaxColor = MaxColor > (byte)B ? MaxColor: (byte)B;rgbvalues[pos] = MaxColor;rgbvalues[pos + 1] = MaxColor;rgbvalues[pos + 2] = MaxColor;pos = pos + 3;}pos = pos + sourceData.Stride - sourceData.Width * 3;}IntPtr pDest = destData.Scan0;Marshal.Copy(rgbvalues, 0, pDest, allBytes);sourceImg.UnlockBits(sourceData);destImg.UnlockBits(destData);picDest.Image = destImg;}

【例 17.44灰度算法二:平均值法。

       //灰度:均值法private void btnGray2_Click(object sender, EventArgs e){Bitmap destImg = new Bitmap(sourceImg.Width, sourceImg.Height);BitmapData sourceData = sourceImg.LockBits(new Rectangle(0, 0, sourceImg.Width, sourceImg.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);BitmapData destData = destImg.LockBits(new Rectangle(0, 0, sourceImg.Width, sourceImg.Height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);IntPtr pSource = sourceData.Scan0;int allBytes = sourceData.Stride * sourceData.Height;byte[] rgbvalues = new byte[allBytes];Marshal.Copy(pSource, rgbvalues, 0, allBytes);int pos = 0;int R, G, B;int avgValue;for (int j = 0; j < sourceData.Height; j++){for (int i = 0; i < sourceData.Width; i++){B = rgbvalues[pos];G = rgbvalues[pos + 1];R = rgbvalues[pos + 2];avgValue = (B + G + R) / 3;rgbvalues[pos] = (byte)avgValue;rgbvalues[pos + 1] = (byte)avgValue;rgbvalues[pos + 2] = (byte)avgValue;pos = pos + 3;}pos = pos + sourceData.Stride - sourceData.Width * 3;}IntPtr pDest = destData.Scan0;Marshal.Copy(rgbvalues, 0, pDest, allBytes);sourceImg.UnlockBits(sourceData);destImg.UnlockBits(destData);picDest.Image = destImg;}

【例 17.45灰度算法三:指数加权法。

       //灰度:指数加权法private void btnGray3_Click(object sender, EventArgs e){Bitmap destImg = new Bitmap(sourceImg.Width, sourceImg.Height);BitmapData sourceData = sourceImg.LockBits(new Rectangle(0, 0, sourceImg.Width, sourceImg.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);BitmapData destData = destImg.LockBits(new Rectangle(0, 0, sourceImg.Width, sourceImg.Height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);IntPtr pSource = sourceData.Scan0;int allBytes = sourceData.Stride * sourceData.Height;byte[] rgbvalues = new byte[allBytes];Marshal.Copy(pSource, rgbvalues, 0, allBytes);int pos = 0;int R, G, B;byte y;for (int j = 0; j < sourceData.Height; j++){for (int i = 0; i < sourceData.Width; i++){B = rgbvalues[pos];G = rgbvalues[pos + 1];R = rgbvalues[pos + 2];y =(byte)( R * 0.3 + G * 0.59 + B * 0.11);rgbvalues[pos] = y;rgbvalues[pos + 1] = y;rgbvalues[pos + 2] = y;pos = pos + 3;}pos = pos + sourceData.Stride - sourceData.Width * 3;}IntPtr pDest = destData.Scan0;Marshal.Copy(rgbvalues, 0, pDest, allBytes);sourceImg.UnlockBits(sourceData);destImg.UnlockBits(destData);picDest.Image = destImg;}

学习更多vb.net知识,请参看vb.net 教程 目录

学习更多C#知识,请参看 C# 教程 目录

这篇关于17.3.2.5 灰度(内存处理)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57

Thymeleaf:生成静态文件及异常处理java.lang.NoClassDefFoundError: ognl/PropertyAccessor

我们需要引入包: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>sp

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

JVM内存调优原则及几种JVM内存调优方法

JVM内存调优原则及几种JVM内存调优方法 1、堆大小设置。 2、回收器选择。   1、在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM。   2、对JVM内存的系统级的调优主要的目的是减少

JVM 常见异常及内存诊断

栈内存溢出 栈内存大小设置:-Xss size 默认除了window以外的所有操作系统默认情况大小为 1MB,window 的默认大小依赖于虚拟机内存。 栈帧过多导致栈内存溢出 下述示例代码,由于递归深度没有限制且没有设置出口,每次方法的调用都会产生一个栈帧导致了创建的栈帧过多,而导致内存溢出(StackOverflowError)。 示例代码: 运行结果: 栈帧过大导致栈内存

理解java虚拟机内存收集

学习《深入理解Java虚拟机》时个人的理解笔记 1、为什么要去了解垃圾收集和内存回收技术? 当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就必须对这些“自动化”的技术实施必要的监控和调节。 2、“哲学三问”内存收集 what?when?how? 那些内存需要回收?什么时候回收?如何回收? 这是一个整体的问题,确定了什么状态的内存可以

NGINX轻松管理10万长连接 --- 基于2GB内存的CentOS 6.5 x86-64

转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=190176&id=4234854 一 前言 当管理大量连接时,特别是只有少量活跃连接,NGINX有比较好的CPU和RAM利用率,如今是多终端保持在线的时代,更能让NGINX发挥这个优点。本文做一个简单测试,NGINX在一个普通PC虚拟机上维护100k的HTTP