馬賽克拼接圖片生成器done~

寫了半天,瀏覽器崩潰……心好累……不拉家常了這次……
我是Git地址

問題描述

想要把大量的源圖片,使用一定的排序,生成一張新的圖片,使之儘可能類似一張給定的目標圖片:
目標圖片:
這裏寫圖片描述
生成結果:
這裏寫圖片描述

問題分析

  1. 把一個區域(目標圖片)分割成若干個馬賽克區域
    • (過度設計)將一系列的給定的size放入目標區域,嘗試是否能放入。關鍵:使用迭代代替遞歸。(事實上簡簡單單的單一size就夠用了……)
    • TODO:或許可以切分成圓形之類的,不過不知道接下來步驟怎麼做
  2. 把目標圖片按照分割區域進行切分,分析每個區域的顏色信息
    • 關鍵:分析RGB值
  3. 加載和處理源圖片,獲得源圖片的信息
    • 關鍵:進行適當的索引,防止每次使用時都重新加載大量圖片
  4. 將源圖片放入目標圖片的各個區域,得到結果
    • 關鍵:使用八叉樹對源圖片的顏色進行緩存索引,從而快速對每個目標馬賽克區域查找適合的源圖片
    • TODO:應當對RGB通道採取不同的權重比較好
    • TODO:圖像邊緣過於銳利。已做了的線性誤差累積,貌似沒有太大效果

其他想法TODO:
1. 適當修改源圖片的亮度、色調
2. 將源圖片更細的切分成2x2(或更小)的子塊,分析該2x2矩陣,從而獲得更好的分辨率

代碼列表

  1. image_joint_common.py
    • 通用向量類
    • 八叉樹及其查找
      1. image_joint_imgloader.py
    • 加載源圖片,生成緩存圖片(速度慢)
    • 加載緩存圖片(速度快)
    • 統計圖片信息,生成“源圖片顏色列表”和“源圖片大小數量列表”
    • (debug測試用main_test())生成緩存:
      這裏寫圖片描述
  2. image_joint_slice.py
    • 輸入“源圖片大小數量列表”,得到“目標切塊列表”
    • (debug測試用main_test())支持單步輸出:
      這裏寫圖片描述
      (按任意鍵增加色塊)
  3. image_joint_mosaic.py
    • 按照“目標切塊列表”,把“源顏色列表”放入目標切塊
    • (debug測試用main_test())自己生成顏色列表的測試:
      這裏寫圖片描述
      (這裏是隨機生成的顏色)
  4. image_joint_main.py
    • 加載以上四個模塊,獲得最終結果
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章