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. Android源码中添加APP

    参考罗升阳<Android系统源代码情景分析> 在Android源码中,我们通常把实验性质的Android APP放在packages/experimental目录下.对于一个简单的应用程 ...

  2. Ok6410裸机驱动学习(一)开发工具

    1.GCC工具链 1.GCC默认处理的文件类型 文件类型 扩展名 文件说明 文本文件 *.c C语言源文件 *.C.*.cxx.*.cc C++源文件 *.i 预处理后的C语言源文件 *.ii 预处理 ...

  3. Luogu 4768 [NOI2018]归程

    并不会写Kruskal重构树,两个$log$跑得比较卡. 首先考虑一下没有强制在线的要求怎么办,有一个比较容易想到的做法就是先跑一遍最短路,然后把所有边按照海拔从大到小排序,把所有询问的海拔也从大到小 ...

  4. 8、泛型程序设计与c++标准模板库4.标准c++库中的算法

    标准c++算法是通过迭代器和模板来实现的,其实算法本身就是一种函数模板. 算法从迭代器那里获得一个元素,而迭代器则知道一个元素在容器中的什么位置.迭代器查找元素的位置并将这些信息提供给算法以便算法能够 ...

  5. Java学习之多态(Polymorphism)

    多态==晚绑定 不要把函数重载理解为多态. 因为多态是一种运行期的行为,不是编译期的行为. 多态:父类型的引用可以指向子类型的对象. 比如 Parent p = new Child(); 当使用多态方 ...

  6. HN669打包工具--调试文档

    调试有两种方式,一是直接在游戏工程上面调试,这比较麻烦,需要根据插件配置文件和脚本文件去配置好工程选项后,才能调试.简单一点就是通过脚本文件打包后会有生成游戏工程对应每个渠道的工程. 如下图:这个工程 ...

  7. 【Sping管理bean的原理】

    spring容器默认情况下,当服务启动时,解析配置文件,实例化文件中的所有类. 我们直接使用spring时,获取spring注入的bean是这样的, ApplicationContext ctx =  ...

  8. 【leetcode 968. 1028. 从先序遍历还原二叉树】解题报告[待完善...]

    思路:用一个栈来管理树的层次关系,索引代表节点的深度 方法一: TreeNode* recoverFromPreorder(string S) { /* 由题意知,最上层节点深度为0(数字前面0条横线 ...

  9. [poj 1837] Balance dp

    Description Gigel has a strange "balance" and he wants to poise it. Actually, the device i ...

  10. java进阶——反射(Reflect)

    一.Class类 1.类是对象,类是java.lang.Class类的实例对象,这个对象称为该类的类类型: 2.任何一个类都是Class的实例对象,类的表达式: (1)Class c1 = int.C ...