C#将图片2值化示例代码,原图及二值化后的图片如下:
原图:
二值化后的图像:
实现代码:
using System; using System.Drawing; namespace BMP2Grey { class Program { static void ToGrey(Bitmap img1) { for (int i = 0; i < img1.Width; i++) { for (int j = 0; j < img1.Height; j++) { Color pixelColor = img1.GetPixel(i, j); //计算灰度值 int grey = (int)(0.299 * pixelColor.R + 0.587 * pixelColor.G + 0.114 * pixelColor.B); Color newColor = Color.FromArgb(grey, grey, grey); img1.SetPixel(i, j, newColor); } } } static void Thresholding(Bitmap img1) { int[] histogram = new int[256]; int minGrayValue=255, maxGrayValue=0; //求取直方图 for (int i = 0; i < img1.Width; i++) { for (int j = 0; j < img1.Height; j++) { Color pixelColor = img1.GetPixel(i, j); histogram[pixelColor.R]++; if (pixelColor.R > maxGrayValue) maxGrayValue = pixelColor.R; if (pixelColor.R < minGrayValue) minGrayValue = pixelColor.R; } } //迭代计算阀值 int threshold = -1; int newThreshold = (minGrayValue + maxGrayValue) / 2; for(int iterationTimes = 0; threshold != newThreshold && iterationTimes < 100; iterationTimes++) { threshold = newThreshold; int lP1 =0; int lP2 =0; int lS1 = 0; int lS2 = 0; //求两个区域的灰度的平均值 for (int i = minGrayValue;i < threshold;i++) { lP1 += histogram[i] * i; lS1 += histogram[i]; } int mean1GrayValue = (lP1 / lS1); for (int i = threshold+1;i < maxGrayValue;i++) { lP2 += histogram[i] * i; lS2 += histogram[i]; } int mean2GrayValue = (lP2 / lS2); newThreshold = (mean1GrayValue + mean2GrayValue) / 2; } //计算二值化 for (int i = 0; i < img1.Width; i++) { for (int j = 0; j < img1.Height; j++) { Color pixelColor = img1.GetPixel(i, j); if (pixelColor.R > threshold) img1.SetPixel(i, j, Color.FromArgb(255, 255, 255)); else img1.SetPixel(i, j, Color.FromArgb(0, 0, 0)); } } } static void Main(string[] args) { try { //打开位图文件 Bitmap img1 = new Bitmap("test.jpg", true); //灰度化 ToGrey(img1); //二值化 Thresholding(img1); //写回位图文件 img1.Save("output.jpg"); Console.WriteLine("Converted."); } catch (ArgumentException) { Console.WriteLine("Invalid usage!"); Console.WriteLine("Usage: bmp2grey source object"); } } } }
本文向大家介绍C#实现绘制浮雕图片效果实例,包括了C#实现绘制浮雕图片效果实例的使用技巧和注意事项,需要的朋友参考一下 本文采用C#实例讲解了处理图片为浮雕效果的实现方法,这在PS中是一个常见的功能,也是C#中的一个简单的图像处理例子。程序先读取原图,然后依次访问每个像素的RGB值,获取相邻两个像素的R、G、B值,计算与左上角像素的RGB分量之差,将计算后的RGB值回写到位图,最后进行图片的浮雕处
本文向大家介绍C#数字图像处理之图像二值化(彩色变黑白)的方法,包括了C#数字图像处理之图像二值化(彩色变黑白)的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#数字图像处理之图像二值化(彩色变黑白)的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。
我从一个基于html的主题创建了以下网站http://www.nabresco.com。我绝对不是编码位的专家,我想出了我的方法,以便编辑它,以满足我的需要。 该网站正在运行,现在看起来很好。 只剩下一个问题,我似乎弄不明白。 画廊中的图片好像是黑白的,只有当光标在实际选定的图片上时才会变成彩色的。这是发生在一些同事和其他人我正常看它(奇怪?)。 我想改变他们所有的颜色一直没有这种黑白效果。 这些
本文向大家介绍使用css将图片转换成黑白的效果相关面试题,主要包含被问及使用css将图片转换成黑白的效果时的应答技巧和注意事项,需要的朋友参考一下
本文向大家介绍Android实现状态栏白底黑字效果示例代码,包括了Android实现状态栏白底黑字效果示例代码的使用技巧和注意事项,需要的朋友参考一下 前言 本文主要给大家介绍了关于Android如何实现状态栏白底黑字的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 一、描述 在项目中有的时候Ui设计状态栏背景颜色是白色的,虽然还挺好看,不过可坑了我们做程序的,需要对很
本文向大家介绍C#图片上传效果实例分析,包括了C#图片上传效果实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#图片上传效果实现方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。