最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c#實現圖片二值化例子(黑白效果)

 更新時間:2014年08月15日 08:50:19   投稿:junjie  
這篇文章主要介紹了c#實現圖片二值化例子,圖像二值化就是將圖像上的像素點的灰度值設置為0或255,也就是將整個圖像呈現出明顯的黑白效果,需要的朋友可以參考下

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;
        //求兩個區(qū)域的灰度的平均值
        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# textbox的滾動條總是指向最底端的簡單解決方法

    c# textbox的滾動條總是指向最底端的簡單解決方法

    這篇文章主要介紹了c# textbox的滾動條總是指向最底端的簡單解決方法,需要的朋友可以參考下
    2017-11-11
  • C#中out保留字用法實例分析

    C#中out保留字用法實例分析

    這篇文章主要介紹了C#中out保留字用法,實例分析了方法返回值時采用out保留字的用法,需要的朋友可以參考下
    2014-09-09
  • C#實現的24點游戲實例詳解

    C#實現的24點游戲實例詳解

    這篇文章主要介紹了C#實現的24點游戲,較為詳細的分析了24點游戲的算法原理與實現技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • C#/VB.NET 給Excel添加、刪除數字簽名的方法

    C#/VB.NET 給Excel添加、刪除數字簽名的方法

    這篇文章主要介紹了C#/VB.NET 給Excel添加、刪除數字簽名的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • C#比較二個數組并找出相同或不同元素的方法

    C#比較二個數組并找出相同或不同元素的方法

    這篇文章主要介紹了C#比較二個數組并找出相同或不同元素的方法,涉及C#針對數組的交集、補集等集合操作相關技巧,非常簡單實用,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • Winform項目中TextBox控件DataBindings屬性

    Winform項目中TextBox控件DataBindings屬性

    這篇文章介紹了Winform項目中TextBox控件DataBindings屬性的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • C#字典轉指定類型的技巧分享

    C#字典轉指定類型的技巧分享

    這篇文章主要給大家介紹了C#字典轉指定類型的技巧,文中通過代碼示例介紹的非常詳細,對大家的學習或工作有一定的幫助,有需要的朋友可以借鑒參考一下
    2023-10-10
  • Unity實現聊天室功能

    Unity實現聊天室功能

    這篇文章主要為大家詳細介紹了Unity實現聊天室功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • 談C# using的用法與好處

    談C# using的用法與好處

    這篇文章主要為大家詳細介紹了C# using的用法與好處,具體分析了using指令調用的Dispose()方法,感興趣的朋友可以參考一下
    2016-05-05
  • C#實現簡單的字符串加密

    C#實現簡單的字符串加密

    這篇文章介紹了C#實現字符串加密的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06

最新評論

娄底市| 龙南县| 阳朔县| 耒阳市| 磴口县| 余江县| 抚顺县| 无极县| 大名县| 交口县| 清水县| 昌宁县| 工布江达县| 昌平区| 柳林县| 黎川县| 吐鲁番市| 莆田市| 顺平县| 烟台市| 宜川县| 鄱阳县| 荣成市| 崇左市| 洛隆县| 巴青县| 翁源县| 阳西县| 志丹县| 城口县| 开封市| 汝阳县| 陇西县| 加查县| 牡丹江市| 峡江县| 桦南县| 离岛区| 象山县| 定西市| 徐汇区|