項目實戰!如何用Python生成馬賽克畫

2021-01-15 51CTO
項目實戰!如何用Python生成馬賽克畫

馬賽克畫是一張由小圖拼成的大圖,本文的封面就是我們的效果圖,放大看細節,每一塊都是一張獨立的圖片,拼在一起組成一張大圖,感覺像是用馬賽克拼出來的畫,所以叫馬賽克畫。

作者:菜鳥學Python來源:今日頭條|2018-09-12 16:30

大家知道馬賽克畫是什麼嗎?不是動作片裡的馬賽克哦~~

馬賽克畫是一張由小圖拼成的大圖,本文的封面就是我們的效果圖,放大看細節,每一塊都是一張獨立的圖片,拼在一起組成一張大圖,感覺像是用馬賽克拼出來的畫,所以叫馬賽克畫。看到網上的一些馬賽克畫覺得很酷,於是自己用Python實現了一下將一張原圖轉換成馬賽克畫。

我們的效果圖是這樣的

原圖是這樣的

實現的具體思路是這樣

***步:首先收集一組圖片,這些圖片會作為大圖中的小方格圖片。圖片越多,***生成的圖片顏色越接近。

第二步:將要轉換的圖片分割成一個一個小方格圖片,像下面這樣

第三步:對於每一個小方格圖片,取圖片集裡面最接近的圖片替換。所有小方格都替換後,就生成了我們最終的馬賽克畫。

聽上去是不是很簡單?

我們來看一下具體的實現步驟,下面是一些核心代碼。完整代碼可在公眾號後臺回復「mosaic」獲取。

我們的圖片集存在images目錄下,下面的代碼加載目錄下所有的圖片,並縮放成統一的尺寸

這裡load_all_images函數的參數就是統一後的尺寸,tile_row和tile_col分別對應高和寬。

下面的代碼對要轉換的圖片進行分割

我們將要轉換的圖片分割成一個個小方格,tile_row和tile_col是小方格的高和寬,roi存取小方格中的圖片數據。

面是計算兩張圖片相似度的函數

im1和im2是兩張圖片的數據,圖片數據是一個三維的numpy數組,這裡我們將三維數組轉換成一維數組後,比較兩者的歐式距離。之後要找出最相似的圖片,只需遍歷圖片集中所有的圖片,找到距離最短的那張圖片,去替換原圖中的小方格就可以了。

我們再來看一下最終實現的效果

放大圖中局部的細節如下

如果對圖片的畫質不滿意,想要更精細的畫質,可以考慮在分割的時候把圖片分割成更小的方格,不過這樣也會增加程序運行的時間。

生成圖片的過程比較耗時,考慮到性能原因,原程序中使用多進程的方式並行處理。

【責任編輯:

龐桂玉

TEL:(010)68476606】

點讚 0

相關焦點

  • 美翻朋友圈:用Python生成蒙太奇馬賽克圖片
    這就是我們經常聽到了蒙太奇手法,在電影《飛屋環遊記》中皮克斯運用蒙太奇手法,用一個不到5分鐘的短片展現了主角的大半人生,感動無數觀眾。下面我們就看看今天的內容同蒙太奇有何關係。效果展示說這麼多都是虛的,下面我們看看實現的效果,到底什麼是蒙太奇馬賽克圖片,這裡用小松菜奈的照片作為測試:原圖效果圖對比最左邊的是蒙太奇圖縮小的效果,第二個則是正常大小顯示的效果,第三張是原圖,第四張是截取的某個區域的細節。
  • 成都Python培訓周期多久
    : 1.爬蟲攻防    2.圖片馬賽克    3.電影推薦系統    4.地震預測    5.人工智慧項目 勝任職位: 數據分析師(BI)、人工智慧算法工程師(AI)
  • 成都學習Python開發哪家好
    如何選擇成都python培訓機構? python程式語言語法清晰、乾淨、易讀、易維護、代碼量小、可讀性強。當團隊合作開發時,閱讀別人的代碼將是非常迅速和高效的。通俗說來就是「寫起來快、看起來明白!」所以近年來,python開發非常流行。
  • 用Python畫朵玫瑰,只要五分鐘
    最近一個項目在用python,想著這次不用java了,用python給媽媽個禮物吧。Turtle庫是Python語言中一個非常強大的繪製圖像的函數庫,她提供了很多強大的方法,可以方便快速的繪圖,今天我們就來試一下,畫朵玫瑰送給媽媽。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    2 28機器學習提升篇 29數據挖掘篇 30深度學習必備原理與實戰 31深度學習必備原理與實戰2 32深度學習必備原理與實戰3 33深度學習必備原理與實戰4 34深度學習項目實戰 35深度學習項目實戰2 36深度學習項目實戰3 2實用編程技巧進階
  • 「python opencv視覺零基礎實戰」七邏輯運算應用
    一、學習目標了解opencv中圖像的邏輯運算了解opencv中邏輯運算的應用如有錯誤歡迎指出~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python
  • python隨機函數random分配應用,隨機分配8名老師到3個教室中
    python隨機函數python隨機函數在python中,想要生成隨機數而在這個項目中,我們需要使用到生成數字1到3範圍內的隨機數,即通過導入random模塊後,根據random.randint(1,3)隨機生成一個1到3的整數。下面開始實操。
  • 「python opencv計算機視覺零基礎到實戰」九模糊
    一、學習目標了解什麼是卷積了解模糊的使用方法與應用目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰」 第四節色彩空間
  • 再厚的馬賽克都能被扒乾淨?這款開源「去碼」神器火了
    在個人隱私極其容易洩露的網絡時代,大家可能都會使用馬賽克來遮蓋圖片上的敏感信息。  比如身份證號、姓名、地址,用馬賽克掩蓋後,就能有效達到保護信息安全的目的。  自從人類世界出現了馬賽克後,自然也有人專注於如何去碼。  一直以來,號稱能去除馬賽克的軟體層出不窮,但大多都是掛著羊頭賣狗肉的惡意病毒軟體。  然而近期在Github上,又出現了一款號稱能抹去馬賽克讓原圖重現的神器,引發海內外熱議。  這款工具名為Depix,上線沒幾天就在GitHub上標星已超過一萬多,截止目前累計分支也超過了1.3k個。
  • 馬賽克圖片
    馬賽克是一種廣泛使用的圖像處理方式,它是通過將一些區域的圖像亮度調明或者調暗,造成這個區域內的圖像惡化,就會出現模糊的狀態,仔細看又會發現這個模糊區域是由很多小方格組成的,所以人們就將這樣的畫面稱之為馬賽克。其實,馬賽克最早出現在古希臘,屬於一種藝術創作方式,是將很多顏色的小方塊拼湊在一起而形成一幅畫。
  • 「龐貝末日」最後一周開放 馬賽克畫被喻為數碼照片(圖)
    馬賽克畫最神奇  最神奇的是被稱為1900年前的數碼照片——一幅地板馬賽克鑲嵌畫。張開訓介紹,人們在繪畫時,總是用很細的筆描繪真實的圖像,很少想到用分離的單色塊組成一個連續的、細緻的視覺圖像,這是羅馬人的一項創舉。依據視覺原理,人的眼睛在距離25釐米時看東西最清楚,能夠分辨的極限視角是千分之一。
  • 中科大統計學python_python 中科大 - CSDN
    第四課 — 卷積神經網絡https://www.bilibili.com/video/av66646276課程介紹:這門課程將學會理解如何搭建一個神經網絡,包括最新的變體,例如殘餘網絡;知道如何將卷積網絡應用到視覺檢測和識別任務;知道如何使用神經風格遷移生成藝術
  • 廣州Python測試培訓
    除了極少的事情不能做之外,其他基本上都可以用,黑客編程、爬蟲編寫、機器學習、人工智慧等等。立即諮詢 Python開發項目實訓 理論 實戰課程體系,全面涵蓋所有的你需要get到的技術點!
  • 「python opencv視覺零基礎」十、圖片效果毛玻璃
    一、學習目標了解高斯模糊的使用方法了解毛玻璃的圖片效果添加了解如何自己做一個噪聲圖片目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰
  • 「每日一練」巧用python生成隨機數
    隨機數在我們的生產和生活中有很多的應用場景,比如說登錄驗證的隨機數字等等,那麼你知道在Python中怎麼生成隨機數嗎?往下看,就是這麼簡單!題目python中生成隨機整數、隨機小數、0--1之間小數方法代碼先上代碼~運行效果題目詳述程序分析:隨機整數:random.randint(a,b),生成區間內的整數隨機小數:習慣用numpy庫,利用np.random.randn(5)生成5個隨機小數0-1隨機小數
  • Python開發簡單爬蟲【學習資料總結】
    python語言高級:(python語言的高級庫,常用的企業級開發案例實戰) (1)Python常見第三方庫與網絡編程 (2)面向對象,Python正則表達式 (3)求職數據爬蟲,金融數據爬蟲,多線程爬蟲 (4)Python
  • 如何用python在工作中「偷懶」?
    Excel自動化處理Excel合併在實際應用中可能會有不同月份的數據或者不同周的報告等等的Excel數據,都是單個獨立的文件,如果想要整體使用的話就需要合併一下,那麼如何利用python把指定目錄下的所有Excel數據合併成一個文件呢?
  • 如何使用 Python 構建 PC 通信?
    本文就來分享下如何使用Python構建PC與PLC的通信,也算展示一把Python在工控領域的風採。1、python-snap7讀寫分析結合python-snap7的文檔API和源碼分析,python-sna7重要的兩個方法是read_area和write_area,通過這兩個方法就能讀和寫PLC的對應存儲地址。
  • 提高駕駛技術:用GAN去除(愛情)動作片中的馬賽克和衣服
    這篇就介紹利用生成式對抗網絡(GAN)的兩個基本駕駛技能:1) 去除(愛情)動作片中的馬賽克2) 給(愛情)動作片中的女孩穿(tuo)衣服生成式模型上一篇《用GAN生成二維樣本的小例子》中已經簡單介紹了GAN,這篇再簡要回顧一下生成式模型,算是補全一個來龍去脈。
  • AI黑科技真的能去馬賽克嗎
    馬賽克的原理很簡單,把大量的小像素點合併到一個大的像素點,並取平均色,就製造成了馬賽克。馬賽克顯然屬於不可逆運算,你無法從一個平均數,推斷出它是由哪幾個數平均而來的。然而,馬賽克是否當真完全不可能還原?一般來說,要消除馬賽克,需要人進行想像腦補,然後把缺失的內容重新畫出來。這種方法效率低,而且效果並不穩定。近幾年AI技術的風行,帶來了很多不可思議的應用。