博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 指针操作图像 二值化处理
阅读量:6270 次
发布时间:2019-06-22

本文共 2433 字,大约阅读时间需要 8 分钟。

///         /// 二值化图像        ///         ///         /// 
private static unsafe Bitmap Binaryzation(Bitmap bmp) { BitmapData dstData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat); byte* data = (byte*)(dstData.Scan0); //将图像转换为0,1二值得图像; int step = dstData.Stride; int means = getThreshold(data, bmp.Height * step); for (int y = 0; y < bmp.Height; y++) { for (int x = 0; x < bmp.Width * 3; x += 3) { if (data[y * step + x + 2] > means) data[y * step + x] = data[y * step + x + 1] = data[y * step + x + 2] = 255; else data[y * step + x] = data[y * step + x + 1] = data[y * step + x + 2] = 0; } } bmp.UnlockBits(dstData); return bmp; } /// /// 图像二值化 获取阀值 /// /// /// height * Stride ///
private static unsafe int getThreshold(byte* inPixels, int length) {
int inithreshold = 127; int finalthreshold = 0; List
temp = new List
(); for (int index = 0; index < length; index += 3) { temp.Add(inPixels[index + 2]); } List
sub1 = new List
(); List
sub2 = new List
(); int means1 = 0, means2 = 0; while (finalthreshold != inithreshold) { finalthreshold = inithreshold; for (int i = 0; i < temp.Count(); i++) { if (temp[i] <= inithreshold) { sub1.Add(temp[i]); } else { sub2.Add(temp[i]); } } means1 = getMeans(sub1); means2 = getMeans(sub2); sub1.Clear(); sub2.Clear(); inithreshold = (means1 + means2) / 2; } return finalthreshold; } ///
/// 图像二值化 获取Means /// ///
///
private static int getMeans(List
data) { int result = 0; int size = data.Count(); foreach (int i in data) { result += i; } return (result / size); }

 

转载于:https://www.cnblogs.com/mahatmasmile/p/4247709.html

你可能感兴趣的文章
html DOM 的继承关系
查看>>
装饰器的邪门歪道
查看>>
Dubbo常用配置解析
查看>>
【转】C#解析Json Newtonsoft.Json
查看>>
macports的安装及常用命令
查看>>
(转)使用C#开发ActiveX控件
查看>>
spring mvc 基于注解 配置默认 handlermapping
查看>>
半小时学会上传本地项目到github
查看>>
Android学Jni/Ndk 开发记录(一)
查看>>
Linux Tcl和Expect的安装
查看>>
WPF中的依赖项属性(转)
查看>>
linux防火墙相关 iptables
查看>>
最简单的单例模式
查看>>
JPopupMenu的使用以及JPopupMenu中子组件的事件处理
查看>>
从反汇编的角度看引用和指针的区别
查看>>
拓马长枪定乾坤
查看>>
UIProgressView的详细使用
查看>>
Silverlight实用窍门系列:70.Silverlight的视觉状态组VisualStateGroup
查看>>
照片筛选与上传功能
查看>>
Hello ZED
查看>>