程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#處理數碼相片之馬賽克的實現(1)

C#處理數碼相片之馬賽克的實現(1)

編輯:關於C語言

很多圖片處理的算法從原理上講其實非常簡單,難點往往在如何去寫算法實現它,更加難的就是如何去優化實現的算法。雖說我一向認為程序員的效率比程序的效率更重要,但為了等處理一張自己拍攝的數碼照片,溜出去買杯奶茶順便再買張彩票回來發現還沒算好,無論如何都是不能忍受的。

馬賽克算法很簡單,說白了就是把一張圖片分割成若干個val * val像素的小區塊(可能在邊緣有零星的小塊,但不影響整體算法),每個小區塊的顏色都是相同的。為了方便起見,我們不妨讓這個顏色就用該區域最左上角的那個點的顏色。當然還可以有其他方法,比如取區塊中間點的顏色,或區塊中隨機點的顏色作代表等等。

下面的示意圖就是取val=2的結果。

原圖像素

ABCDEFG

HIJKLMN

OPQRSTU

VWXYZ01

2345678

馬賽克處理後

AACCEEG

AACCEEG

OOQQSSU

OOQQSSU

2244668

原理就是那麼簡單。具體實現就看各人的思維習慣了。我的想法是:

當y(當前高度)是val的整數倍時:

掃描當前行中的每一點x,如果x也是val的整數倍,記錄下當前x,y的顏色值;如果x不是val的整數倍,則沿用最近一次被記錄的顏色值。

當y不是val的整數倍:

很簡單,直接復制上一行。

簡單的說就是以線帶面,最終實現讓大家都看不清楚

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved