C#数字图像处理算法学习笔记(一)--C#图像处理的3中方法

Bitmap类:此类封装了GDI+中的一个位图,次位图有图形图像及其属性的像素数据组成。因此此类是用于处理像素数据定义的图形的对象。该类的主要方法和属性如下:

       GetPixel与SetPixel方法:获取或设置一个图像的指定像素的颜色。

      PixelFormat属性:返回图像的像素格式。

      Height和Width:返回图像的高度和宽度。

      LockBits与UnLockBits方法:分别锁定和解锁系统内存中的位图像素。

      LockBits方法返回一个BitmapData类型的对象。

      UnLockBits方法需要一个BitmapData类型的参数。

BitmapData类:

        Height属性,Width属性:被锁定的高度和宽度。

        PixFormat属性:数据的实际像素格式。

        Scan0属性:被锁定数组的首字节地址。如果整个图像被锁定,则是图像的第一个字节地址。

        Stride属性:步幅,也称为扫描宽度。

Graphics类:这个类是GDI+的关键所在。许多对象都是由Graphics类表示的,该类定义了绘制和填充图形对象的方法和属性。一个应用程序只需要进行绘制和着色,他就必须使用Graphics对象。

彩色图像灰度化:为了加速图像处理的速度,在图形算法中,往往将彩色图像转换成灰度图像。而为了适应人眼的感应,使用如下算法:

 Gray(i,j)=0.299*R(i,j)+0587*G(i,j)+0.114*B(i,j)

R(i,j),G(i,j),B(i,j)分别指的是对象像素的R,G,B分量值。

在C#中图像处理的3种方法分别是:提取像素法、内存法、指针法

像素提取法:通过GetPixel方法获取对应的像素信息,处理,再通过SetPixel设置对应像素的信息。这种方法是遍历所有的像素点并进行处理,对新手而言,这种方法便于理解,但效率很低。

内存法:把图像数据复制到内存中,这样程序的运行速度将大大加快。使用了LockBits与UnLockBits方法。内存法的运算速率要远高于像素提取法。

指针法:该方法与内存法类似,也是使用了LockBits与UnLockBits方法。但为了保证类型安全,C#是不支持指针的。要想使用指针,必须使用unsafe关键字。指针法的运算效率要高于内存法。

C#数字图像处理算法学习笔记(一)--C#图像处理的3中方法的更多相关文章

  1. C#数字图像处理算法学习笔记(三)--图像几何变换

    C#数字图像处理算法学习笔记(三)--图像几何变换 几何图像处理包括 图像的平移变换,镜像变换,旋转变换,伸缩变换,在这里仅以水平镜像为例,通过代码来理解其基本操作方式: 翻转前:

  2. C#数字图像处理算法学习笔记(二)--点运算与直方图

    C#数字图像处理算法学习笔记(二)--点运算与直方图 在数字图像处理中,点运算是一种简单而重要的技术.点运算只是根据对象的像素的输入灰度值来决定像素的输出灰度值的图像处理运算.它有时也被称为对比度增强 ...

  3. Java学习笔记(七)——获取类中方法的信息,java的LinkedList

    [前面的话] 在实际项目中学习知识总是最快和最有效的,既能够较好的掌握知识,又能够做出点东西,还是简单的知识总结,最近一直在总结笔记,写的东西还是比较水,希望慢慢可以写出一些干货. 学习过程中的小知识 ...

  4. Java多线程学习笔记(一)——Thread类中方法介绍

    currentThread():返回代码正在被哪个线程调用. public class CurrentThreadWay { public static void main(String[] args ...

  5. Java多线程学习笔记(四)——Thread类中方法介绍

    currentThread():返回代码正在被哪个线程调用. public class CurrentThreadWay { public static void main(String[] args ...

  6. Vue.js学习笔记:在元素 和 template 中使用 v-if 指令

    f 指令 语法比较简单,直接上代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " ...

  7. C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例

    C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...

  8. vue学习笔记之:为何data是一个方法

    vue学习笔记之:为何data是一个方法 在vue开发中,我们可以发现,data中的属性值是在function中return出来的.可为何data必须是一个函数呢?我们先看官方的解释: 当一个组件被定 ...

  9. [P1169] 棋盘制作 &悬线法学习笔记

    学习笔记 悬线法 最大子矩阵问题: 在一个给定的矩形中有一些障碍点,找出内部不包含障碍点的,边与整个矩形平行或重合的最大子矩形. 极大子矩型:无法再向外拓展的有效子矩形 最大子矩型:最大的一个有效子矩 ...

随机推荐

  1. C# 判断路径和文件存在

    1.判断路径是否存在,不存在则创建路径: if (!System.IO.Directory.Exists(@"D:\Export")) { System.IO.Directory. ...

  2. 关于audio.js的研究

    ——杂言:audio.js结合使用html5的audio组件实现了音频的原位播放功能.虽然项目里已经使用一段时间了,不过我是最近才开始有所接触,惭愧.个人见解若有不对,请帮忙纠正,谢谢. 官方相关链接 ...

  3. Java探索之旅(15)——包装类和字符类

    1.包装类 ❶出于对性能的考虑,并不把基本数据类型作为对象使用,因为适用对象需要额外的系统花销.但是某些Java方法,需要对象作为参数,例如数组线性表ArrayList.add(Object).Jav ...

  4. p4171&bzoj1823 满汉全席

    传送门(洛谷) 传送门(bzoj) 题目 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能 ...

  5. 使用JSP输出九九乘法表

    在html网页中编写Java代码是,需要使用<%%>来编写,<%=%>表示取等号后面的值,如<%="hello"%>就会输出hello. < ...

  6. AQS(AbstractQueuedSynchronizer)应用案例-02

    1.概述 通过对AQS源码的熟悉,我们可以通过实现AQS实现自定义的锁来加深认识. 2.实现 1.首先我们确定目标是实现一个独占模式的锁,当其中一个线程获得资源时,其他线程再来请求,让它进入队列进行公 ...

  7. sqlserver2012——触发器

    触发器:是一个修改指定数据时执行的存储过程. 创建触发器 Create Trigger trigger_name ON {table|view} { } 例子: insert触发器: create T ...

  8. 商派OMS增加PMC跟生产中心角色权限思路

    一.目标:根据现有的商派OMS框架逻辑二开 PMC中(外协单位.生产中心)角色权限(如:下图的仓库角色,根据[接单元.发货员.仓库管理员],选择一或多的版权仓库,同理,如外协单位根据[**.** .* ...

  9. js async/await

    一.async 带async关键字的函数,是声明异步函数,返回值是promise对象,如果async关键字函数返回的不是promise,会自动用Promise.resolve()包装. async f ...

  10. WampServer的安装

    首先安装好Microsoft Visual C++ 然后再安装WampServer 安装过程很简单 错误解决 运行后为黄色图标(成功运行应该为绿色图标) 解决办法: 1.80端口是否被占用 你的80端 ...