C# 教程
文章平均质量分 53
VB.Net
vb.net爱好者
展开
-
17.3.2.9 像素处理与内存处理之比较
通过第17.3.2.1节到第17.3.2.8节,相信读者对通过锁定内存来处理图像有了一定认识。与第17.3.1节相比较,可以看到代码量增加了不少,而且跟踪字节数组中数据位置时很容易把人绕晕。从图17-50可以看到,在处理一张大小为3024*4032的图片时,同样的算法,像素处理耗费的时间是内存处理时间的百倍。总之,效率是第一生产力,在处理图像时可以先使用像素处理辅助理解算法,但在正式代码中应使用内存处理。本例中使用灰度平均值的算法,分别计算像素处理和内存处理所耗费的时间。学习更多C#知识,请参看。原创 2024-02-17 10:41:07 · 743 阅读 · 0 评论 -
17.3.2.8 自定义处理(内存处理)
自定义图像处理,保留图像上的单一色系或者多个色系。自定义处理的算法请参看第17.3.1.6节。学习更多C#知识,请参看。原创 2024-02-17 10:40:53 · 444 阅读 · 0 评论 -
17.3.2.7 二值化(内存处理)
二值化的算法请参看第17.3.1.5节。学习更多C#知识,请参看。原创 2024-02-17 10:40:23 · 411 阅读 · 0 评论 -
17.3.2.6 浮雕(内存处理)
浮雕的算法请参看第17.3.1.4节。学习更多C#知识,请参看。原创 2024-02-16 13:21:41 · 409 阅读 · 0 评论 -
17.3.2.5 灰度(内存处理)
灰度的算法请参看第17.3.1.3节。学习更多C#知识,请参看。灰度算法三:指数加权法。灰度算法一:最大值法。灰度算法二:平均值法。原创 2024-02-16 13:17:35 · 511 阅读 · 0 评论 -
17.3.2.4 曝光(内存处理)
曝光的算法请参看第17.3.1.2节。学习更多C#知识,请参看。原创 2024-02-16 13:15:17 · 395 阅读 · 0 评论 -
17.3.2.3 逆反(内存处理)
先是创建了与源图像同样大小的目标图像,然后使用LockBits方法将两个图像都锁定到内存,创建一维字节数组,将内存中源图像数据拷贝到这个一维数组,处理数组,将数组数据拷贝到内存中的目标图像。最后使用UnlockBits解除源图像和目标图像的锁定。由于采用的算法和像素处理算法一致,所以生成图像相同(下同)。逆反的算法请参看第17.3.1.1节。学习更多C#知识,请参看。原创 2024-02-16 13:13:47 · 396 阅读 · 0 评论 -
17.3.2.2 BitmapData类
当使用Bitmap.LockBits方法后,Bitmap中的像素数据信息被锁定到内存,内存的起始位置是Scan0,当PixelFormat为Format24bppRgb时,依次按照图片第一个像素的蓝色、绿色、红色分量各一个字节,第二个像素的蓝色、绿色、红色分量各一个字节……Padding是自动补足的未使用的空间,由于Stride的大小应为4的倍数,当跨距宽度不是4的倍数时,应补足,具体的算法是。其中,PB、PG、PR、PA分别是蓝色、绿色、红色、alpha分量对应的指针位置,都指向的是一个Byte。原创 2024-02-16 13:11:15 · 944 阅读 · 0 评论 -
17.3.2.1 Bitmap.LockBits方法和Bitmap.UnlockBits方法
采用的数据格式会影响我们对图像数据的处理,通常情况下,常使用PixelFormat.Format24bppRgb,本书中也以此格式举例。Format32bppArgb:指定格式为每像素32位;Alpha、红色、绿色和蓝色分量各使用8位。Format24bppRgb:指定格式为每像素24位;红色、绿色和蓝色分量各使用 8 位。学习更多C#知识,请参看。原创 2024-02-16 13:08:00 · 716 阅读 · 0 评论 -
17.3.2 内存处理
为了将图像数据锁定到内存,从而换来更高处理效率,我们需要使用Bitmap.LockBits方法获得一个BitmapData类,使用完毕内存后使用Bitmap.UnlockBits方法解锁占用的内存。内存处理是比像素处理更高效的处理方式,但是也比像素处理理解起来更复杂。学习更多C#知识,请参看。原创 2024-02-16 13:06:56 · 406 阅读 · 0 评论 -
17.3.1.6 自定义处理
B=255)、黄色对应的是(R=255;如果只是按照绝对的RGB颜色值来划分,例如单纯的取红色(R=255,G=0,B=0),其实在图像中是比较少见的,而且和红色接近的颜色(R=236,G=0,B=0),肉眼所见也属于红色范畴。G > 180,并且B > 180,并且(B >= G) 或 (G - B) < 10) ,并且B - R > 40,并且G - R > 40。R > 140,并且G > 120,并且Math.Abs(G - R) < 40,并且R - B > 80,并且G - B > 80。原创 2024-02-16 12:53:53 · 387 阅读 · 0 评论 -
17.3.1.5 二值化(黑白)
2、第一种算法选择128作为阈值,在实际使用中显示效果并不是很好,可以采用更常见的求阈值的方法,例如大律法等。1、彩色图像灰度化后,根据灰度和阈值来确定颜色是黑色还是白色。通常情况下使用的阈值是128。学习更多C#知识,请参看。原创 2024-02-16 12:52:44 · 684 阅读 · 0 评论 -
17.3.1.4 浮雕
2、相邻两个像素的红绿蓝颜色分量值差的绝对值再加上一个常数。例如:从第二列像素开始,下一列的红绿蓝颜色分量值等于该行红绿蓝颜色分量减去上一列的红绿蓝颜色分量的绝对值,再加上128。如果小于0,那么等于0,如果大于255,那么等于255。1、相邻两个像素的红绿蓝颜色分量值差再加上一个常数。例如:从第二列像素开始,下一列的红绿蓝颜色分量值等于该列红绿蓝颜色分量值减去上一列的红绿蓝颜色分量,再加上128。如果小于0,那么等于0,如果大于255,那么等于255。原图像:颜色值color=(R,G,B)原创 2024-02-16 12:50:52 · 594 阅读 · 0 评论 -
17.3.1.3 灰度
将R,G,B分别乘上一个权重值,通常为Y=R * 0.3 + G * 0.59 + B * 0.11。2、平均值法: 使用每个像素点的 R,G,B值等于原像素点的RGB值的平均值;求出R,G,B中最大的值:Y=Max(R,G,B)求出R,G,B的平均值:Y=(R+B+G)/3。原图像:颜色值color=(R,G,B)原图像:颜色值color=(R,G,B)原图像:颜色值color=(R,G,B)新图像:color=(Y,Y,Y)新图像:color=(Y,Y,Y)新图像:color=(Y,Y,Y)原创 2024-02-16 12:48:07 · 628 阅读 · 0 评论 -
17.3.1.2 曝光
基本算法:先定义一个阈值,通常取得是128。原图像:颜色值color=(R,G,B)如果R<阈值,那么RNew=255-R。如果G<阈值,那么GNew=255-G。如果B<阈值,那么BNew=255-B。学习更多C#知识,请参看。原创 2024-02-16 12:06:52 · 329 阅读 · 0 评论 -
17.3.1.1 逆反(底片)
源图像:颜色值color=(R,G,B)学习更多C#知识,请参看。原创 2024-02-16 12:04:44 · 375 阅读 · 0 评论 -
17.3.1 像素处理
通常是对源图像使用GetPixel方法获得颜色,对颜色的R(红)、G(绿)、B(蓝)分量进行处理,使用颜色的。从17.3.1.1节至17.3.1.6节介绍处理图像的多种方法,涉及的代码均在【项目:code17-031】中。R、G、B分量合成新的颜色,最后使用SetPixel方法将新的颜色应用到目标图像。参数color:Color 结构,它表示要分配给指定像素的颜色。参数x:要检索的像素的 x 坐标。参数y:要检索的像素的 y 坐标。参数x:要设置的像素的 x 坐标。参数y:要设置的像素的 y 坐标。原创 2024-02-16 12:01:20 · 573 阅读 · 0 评论 -
C# 教程 目录
17.3.2.1 Bitmap.LockBits方法和Bitmap.UnlockBits方法。17.3.2.9 像素处理与内存处理之比较。17.3.1.5 二值化(黑白)17.3.1.1 逆反(底片)17.3.1.6 自定义处理。17.3.2.8 自定义处理。17.3.2.7 二值化。17.3.1 像素处理。17.3.1.2 曝光。17.3.1.3 灰度。17.3.1.4 浮雕。17.3.2 内存处理。17.3.2.3 逆反。17.3.2.4 曝光。17.3.2.5 灰度。17.3.2.6 浮雕。原创 2024-02-16 12:00:37 · 1106 阅读 · 0 评论