1. 程式人生 > >C#影象處理實踐——圖片不同提取

C#影象處理實踐——圖片不同提取

有時候會遇到有兩張幾乎完全相同的圖片,但其中一張會多一些東西,比如logo、花紋等。此程式可以找到這些不同,將圖片不同的畫素放到另一張圖片上

例如:
這裡寫圖片描述

程式介面如下圖
這裡寫圖片描述
點選檔案1按鈕載入第一個圖片,檔案2同理,點選【開始比較】按鈕,會生成一張新的圖片,即兩個圖片之間的差異(檔案1多於檔案2的部分)
主要問題在對於圖片畫素的處理(按下【開始比較】按鈕的處理)
程式壓縮包見如下連結
http://download.csdn.net/detail/u013218907/9500550

核心程式碼如下:

private void btnStartCompare_Click(object sender, EventArgs e)
        {
            Bitmap bitmap1 = (Bitmap)Bitmap.FromFile(this
.tbxFilePath1.Text, false); Bitmap bitmap2 = (Bitmap)Bitmap.FromFile(this.tbxFilePath2.Text, false); Bitmap diffBitmap = createBitmap(bitmap1.Width, bitmap1.Height); //檢查圖片 if (!checkBitmap(bitmap1, bitmap2)) { MessageBox.Show(this
, "圖片有問題", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } compareBitmap(bitmap1, bitmap2, diffBitmap); try { diffBitmap.Save("diff.png"); } catch (Exception) { MessageBox.Show(this
, "儲存圖片時發生錯誤〒_〒", "出錯了", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } MessageBox.Show(this, "成功完成圖片處理~", "成功了!!!", MessageBoxButtons.OK, MessageBoxIcon.Information); } private bool checkBitmap(Bitmap bitmap1, Bitmap bitmap2) { if (bitmap1 == null || bitmap2 == null) { return false; } if (bitmap1.Width != bitmap2.Width || bitmap1.Height != bitmap2.Height) { return false; } return true; } private void compareBitmap(Bitmap bitmap1, Bitmap bitmap2, Bitmap diffBitmap) { Color color1; Color color2; int wide = bitmap1.Width; int height = bitmap1.Height; for (int y = 0; y < height; y++) { for (int x = 0; x < wide; x++) { //獲取畫素的RGB顏色值 color1 = bitmap1.GetPixel(x, y); color2 = bitmap2.GetPixel(x, y); if (color1 != color2) { diffBitmap.SetPixel(x, y, color1); } } } return; } private Bitmap createBitmap(int wight, int height) { Bitmap bitmap = new Bitmap(wight, height); bitmap.MakeTransparent(Color.Transparent); return bitmap; } public static Bitmap RGB2Gray(Bitmap srcBitmap) { Color srcColor; int wide = srcBitmap.Width; int height = srcBitmap.Height; for (int y = 0; y < height; y++) for (int x = 0; x < wide; x++) { //獲取畫素的RGB顏色值 srcColor = srcBitmap.GetPixel(x, y); byte temp = (byte)(srcColor.R * .299 + srcColor.G * .587 + srcColor.B * .114); //設定畫素的RGB顏色值 srcBitmap.SetPixel(x, y, Color.FromArgb(temp, temp, temp)); } return srcBitmap; } }