美翻朋友圈:用Python生成蒙太奇馬賽克圖片

2020-12-05 AI科技大本營

題圖 | 視覺中國

我們有時候會聽到這麼一個詞--「蒙太奇」,但卻不知道這個詞是什麼意思。蒙太奇原為建築學術語,意為構成、裝配。而後又延伸為一種剪輯理論:當不同鏡頭拼接在一起時,往往又會產生各個鏡頭單獨存在時所不具有的特定含義。

這就是我們經常聽到了蒙太奇手法,在電影《飛屋環遊記》中皮克斯運用蒙太奇手法,用一個不到5分鐘的短片展現了主角的大半人生,感動無數觀眾。下面我們就看看今天的內容同蒙太奇有何關係。

效果展示

說這麼多都是虛的,下面我們看看實現的效果,到底什麼是蒙太奇馬賽克圖片,這裡用小松菜奈的照片作為測試:

原圖效果圖對比

最左邊的是蒙太奇圖縮小的效果,第二個則是正常大小顯示的效果,第三張是原圖,第四張是截取的某個區域的細節。從圖四可以很容易看出,我們的蒙太奇圖片是使用許多不同的圖片拼接而成的。

代碼實現

程序的實現分為幾個步驟,首先我們需要準備工作,一個是我們的底圖,也就是上面的圖三。另外就是需要一個圖片集,這個圖片集的選取有幾個規範,首先不能有gif圖和png圖片,其次就是圖片的顏色儘量豐富,圖片數量也多一些,這樣效果會更好。另外就是選取長寬比接近1的圖片效果會更好。然後就是我們代碼部分的工作了:

圖片預處理獲取顏色的主色調列表遍歷底圖的每個像素塊在色調列表中尋找與當前色調塊最相近的圖片將圖片修改大小後粘貼到當前遍歷的色調塊保存圖片大家對於上面的步驟或許還有些疑問,這些疑問在具體實現中細說。先看看我們要用到的一些模塊:

import osimport cv2import mathimport numpy as np其中opencv的安裝如下:

pip install opencv-python

3.1、圖片預處理

人工挑圖片還是比較麻煩的,所以我們只要求人先挑好一些圖片,然後我們將不符合規範的圖片刪除即可:

def renameImages(path)://獲取圖片路徑列表filelist = [path + i for i in os.listdir(path)]//用數字給圖片命名img_num = str(len(filelist))name = int(math.pow(10, len(img_num)))//遍歷列表for file in filelist://刪除gif和png圖片if file.endswith('.gif') or file.endswith('.GIF') or file.endswith('.png') or file.endswith('.PNG'):os.remove(file)continue# 對圖片以數字編號重命名os.rename(file, path + str(name) + '.jpg')name += 1執行上面的方法後我們就把合適的圖片篩選出來了。

3.2、獲取顏色的主色調列表

獲取主色調列表前我們需要先獲取主色調,這裡直接使用bgr值的平均值作為主色調:

def getDominant(im):"""獲取主色調"""b = int(round(np.mean(im[:, :, 0])))g = int(round(np.mean(im[:, :, 1])))r = int(round(np.mean(im[:, :, 2])))return (b, g, r)通常RGB模式的圖片我們接觸的比較多,但是在OpenCV中圖片是以BGR模式讀取,每個字母的含義是一樣的,只是順序不同,這裡需要注意一下。接下來我們獲取主色調列表:

def getColors(path):"""獲取圖片列表的色調表"""colors =# 獲取圖片列表filelist = [path + i for i in os.listdir(path)]# 遍歷列表for file in filelist:# 讀取圖片im = cv2.imdecode(np.fromfile(file, dtype=np.uint8), -1)try:# 獲取圖片主色調dominant = getDominant(im)except:continue# 將主色調添加到色調列表中colors.append(dominant)return colors有了色調列表,我們對比顏色的操作就可以直接同色調列表進行了。

3.3、尋找主色調最接近的圖片

我是通過比較兩張圖片主色調的BGR值,然後將差的絕對值相加的方式獲得色調的差異:

def fitColor(color1, color2):"""返回兩個顏色之間的差異大小"""# 求出b通道之間的差異b = color1[0] - color2[0]# 求出g通道之間的差異g = color1[1] - color2[1]# 求出r通道之間的差異r = color1[2] - color2[2]# 返回絕對值的和return abs(b) + abs(g) + abs(r)

3.4、遍歷,尋找並粘貼

這裡就是我們的方法主體了,內容比較多,我們先看看代碼:

def generate(im_path, imgs_path, box_size, multiple=1):"""生成圖片"""# 讀取圖片列表img_list = [imgs_path + i for i in os.listdir(imgs_path)]# 讀取圖片im = cv2.imread(im_path)im = cv2.resize(im, (im.shape[1]*multiple, im.shape[0]*multiple))# 獲取圖片寬高width, height = im.shape[1], im.shape[0]# 遍歷圖片像素for i in range(height // box_size+1):for j in range(width // box_size+1):# 圖塊起點坐標start_x, start_y = j * box_size, i * box_size# 初始化圖片塊的寬高box_w, box_h = box_size, box_size# 截取當前遍歷到的圖塊box_im = im[start_y:, start_x:]if i == height // box_size:box_h = box_im.shape[0]if j == width // box_size:box_w = box_im.shape[1]if box_h == 0 or box_w == 0:continue# 獲取主色調dominant = getDominant(im[start_y:start_y+box_h, start_x:start_x+box_w])img_loc = 0# 差異,同主色調最大差異為255*3dif = 255 * 3# 遍歷色調表,查找差異最小的圖片for index in range(colors.__len__):if fitColor(dominant, colors[index]) < dif:dif = fitColor(dominant, colors[index])# 色調列表同圖片列表的位置是一致的,所以我們獲取色調下標即可img_loc = index# 讀取差異最小的圖片,img_list[img_loc]為差異最小的圖片box_im = cv2.imdecode(np.fromfile(img_list[img_loc], dtype=np.uint8), -1)# 轉換成合適的大小box_im = cv2.resize(box_im, (box_w, box_h))# 鋪墊色塊im[start_y:start_y+box_h, start_x:start_x+box_w] = box_imj += box_wi += box_h# 返回結果圖return im首先我們看看傳入的參數都是什麼含義:

im_path : 底圖的路徑imgs_path : 圖片列表的根目錄box_size : 像素塊的大小multiple=1 : 圖片的縮放大小,默認為1前面兩個參數非常好理解。對於box_size參數的解釋就是效果圖四種,每張照片的尺寸,因為我全部以正方形處理,所以只有一個大小。而multiple參數則是縮放大小,當我們底圖為50*50沒有設置縮放時,結果圖也是50*50,當我們將縮放設置為2,結果圖則為100*100。因為圖片太小的話看不到像素塊中的圖片,所以利用縮放讓效果更好,但是縮放值設置過大的話圖片內存會大許多。其它部分的解釋都在代碼中了。最後再給大家看一張效果圖:

效果圖片

因為事先效果不是非常樂觀,所以給大家看一張朦朧的效果圖。

真沒想到,Python還能實現5毛特效作詞家下崗系列:教你用 AI 做一個寫歌詞的軟體AI修復100年前晚清影像喜提熱搜,這兩大算法立功了阿里雲自研數據倉庫 AnalyticDB 再捧 TPC 全球冠軍調查了 17,000 多位程式設計師,當前的雲原生開發現狀究竟如何?CSW:驚天巨騙 or 比特幣「圖騰」中本聰?從 0 到 70%:Chrome 上位揭秘!

相關焦點

  • 如何用Python生成馬賽克畫
    如何用Python生成馬賽克畫 馬賽克畫是一張由小圖拼成的大圖,本文的封面就是我們的效果圖,放大看細節,每一塊都是一張獨立的圖片,拼在一起組成一張大圖,感覺像是用馬賽克拼出來的畫,所以叫馬賽克畫。
  • 馬賽克圖片
    圖片來源:pixabay而Mosaico(馬賽克)這個詞也源於希臘語(MUSES)的發音,最早出現的馬賽克畫只有王公貴族才擁有,後來在各種建築上被廣泛使用,也被稱之為鑲嵌的藝術品。但是,不管怎麼努力始終無法找到破解馬賽克的辦法,然而隨著技術的發展,破解馬賽克已經變成了現實。美國杜克大學的幾位研究人員,就利用一種PULSE的AI算法,就能夠完全去除馬賽克,並且能夠達到打馬賽克前的像素效果。
  • 馬賽克格子效果照片是怎麼做的?其實是用了這款圖片處理工具!
    各位晚上好,大家是不是經常看到下面這種圖,就是把一張照片分割成很多格子,然後用其他圖片進行填充組成馬賽克格式的原照片。利用這種圖片,可以表達出更多內涵。這種圖片看著挺複雜,但是利用今天發哥分享的這款軟體,你也可以快速製作出自己的馬賽克個性圖。
  • 一「鍵」去馬賽克軟體,用在遊戲人物時,結果笑翻了
    相信大家在日常裡,經常會看到馬賽克的出現,無論是各種電視採訪中用來保護隱私,還是各種節目中避免打廣告嫌疑,都能看見馬賽克的身影。馬賽克作為一項重大的發明,被運用在方方面面,早已讓人見慣不怪了。但是,一個軟體的橫空出世,卻能還原被馬賽克遮擋的畫面,它就是「Face Depixelizer」。
  • 馬賽克圖片竟然能被還原?
    在乎的人突然發了這樣一條帶塗鴉或者馬賽克配圖的朋友圈,多少會有些好奇心。讓人想知道,跟ta聊天的人是誰呢,他們在聊些什麼內容。到底怎麼才能滿足我們的好奇心理呢?這裡有個教你去塗鴉的教程。PS有這麼「萬能」嗎?我們是不是能按照教程看清塗鴉下面的文字呢?憑著科學實驗求真的精神,我們跟著來操作一下。
  • 【乾貨】製作屬於自己的馬賽克合成圖
    新浪科技訊 NASA近日公布了幾張冥王星及其最大的衛星卡戎的馬賽克圖片
  • 美國新AI算法可以還原馬賽克圖片內容
    在很多場合下,打馬賽克都是很有用也很必要的,比如出於安全和保護的初衷。不過人類就是這麼奇怪,娛樂般的好奇心總是這麼永無止境,就好像很多年輕的朋友一樣,好奇心泛濫,對馬賽克畫面深惡痛絕,看到很多模糊的照片,打馬賽克的照片,總是想一窺究竟,想還原一下馬賽克下面到底是什麼樣的畫面?
  • 可怕,照片去馬賽克成為現實
    不知道大家還記不記得,當時微信朋友圈出現過的 「 紅包照片」 功能!當時可謂是 「 紅極一時 」 !把照片通過模糊化處理,只要紅包付款後,就能成功查看照片。所以當時的朋友圈,是這樣的:所以當時在準備高考的小狐,是這樣的:對了!說到高考,這兩天也是高考日,祝考生們能心想事成,遇到題目迎刃而解,加油!小狐也會以更優質的內容去支持你們!
  • 應用控 | 把羞射的部位統統遮掉,馬賽克應用合集(已更...
    ——百度百科不論哪一種定義,馬賽克都和藝術聯繫起來,當然,我也知道蒼老師的那也是藝術。打住,我們就開始直接進入羞射的主題吧。由於 iOS 不像很多 Android ROM 那樣「功能強大」,自帶的相片編輯不能打碼編輯,而尾巴們自拍後準備發朋友圈時,發現照片背景出現了 ,嗯,這時下面幾款小應用或許能派上用場了。(什麼?毀圖秀秀?
  • 被狠狠打了「馬賽克」的圖片,就這樣被AI還原了
    你可能覺得奇怪,大家明明把「姓名、身份證號、準考證號」等個人敏感信息都打上了馬賽克,為什麼還會洩露信息?難不成還可以恢復?可能還真的可以!同樣在昨晚,GitHub上一個AI項目衝上了熱榜,截止目前已經收穫了8.4k星標。這個AI的主要功能就是:去除馬賽克,還原字符密碼。
  • 意識流與蒙太奇
    (一)意識流1、含義:主要是指作家在設置文本結構時,將人幽晦的潛意識活動狀態作為文本內容展開的邏輯依據加以模擬,從而生成文本結構的一種文本布局方式。A、混亂的時空;B、荒誕、無聊、焦慮的意識;(二)蒙太奇1、含義:法文montage的音譯,本是建築學中的概念,意為「裝配」、「構成」、「組接」等含義。後背引入電影製作理論,意為「剪輯」、「組合」之意。後又被引用到文學創作理論中。
  • 這款消除軟體火了,連馬賽克遮擋的圖片都能復原?太神奇了
    通過AI修復模糊或褪色的圖片或書籍,計算機可以通過數據比較和分析將圖片還原為原始外觀。 因此可以說,人工智慧技術的作用非常大。實際上,人工智慧技術不僅應用於這些領域,而且還用於某些成像軟體的開發中。 例如,一些外國開發商已經推出了基於AI技術的圖片處理軟體DeepNude。 它最強大的功能是「去除」物體表面的覆蓋物。
  • 提高駕駛技術:用GAN去除(愛情)動作片中的馬賽克和衣服
    這篇就介紹利用生成式對抗網絡(GAN)的兩個基本駕駛技能:1) 去除(愛情)動作片中的馬賽克2) 給(愛情)動作片中的女孩穿(tuo)衣服生成式模型上一篇《用GAN生成二維樣本的小例子》中已經簡單介紹了GAN,這篇再簡要回顧一下生成式模型,算是補全一個來龍去脈。
  • Python類庫Pillow實現圖片裁剪、縮放、效果增強等功能
    用於圖像歸檔和圖像批量處理,你可以使用它建立縮略圖,轉換格式,列印圖片等等,現在的版本可以驗證和讀取大量的圖片格式。im = Image.open('./2023163c.jpg')im.save('alibaba.png')運行結果:會在目錄內生成一個png格式圖片。
  • python圖像處理-gif動圖
    ,你會覺得是同一張圖片的不同形態。利用這個原理只要控制好時間,就能夠將一系列圖片組合在一起形成動圖了,更長的可以形成動畫等等。比如下面的圖片,每一張我們稱為一幀,我們看到的動態效果,其實就好像在不斷翻圖片給你看。
  • 技術老司機開車:用GAN去除(愛情)動作片中的馬賽克和衣服!
    除了直接用C-GAN,這項工作還有兩個改進:1)利用U-Net結構生成細節更好的圖片[6]在pix2pix中,這個思想主要體現在兩個地方:一個是loss函數,加入了L1 loss用來讓生成的圖片和訓練的目標圖片儘量相似,而圖像中高頻的細節部分則交由GAN來處理:
  • 手機上好用的去水印P圖軟體有哪些 好用的手機處理圖片軟體推薦
    手機上好用的去水印P圖軟體有哪些 好用的手機處理圖片軟體推薦時間:2018-02-24 11:07   來源:皮皮養生網   責任編輯:沫朵 川北在線核心提示:原標題:手機上好用的去水印P圖軟體有哪些 好用的手機處理圖片軟體推薦 P圖軟體是每個人手機上必不可少的一款工具軟體了,大家總是希望自己的照片可以完美的呈現
  • 「每日一練」巧用python生成隨機數
    隨機數在我們的生產和生活中有很多的應用場景,比如說登錄驗證的隨機數字等等,那麼你知道在Python中怎麼生成隨機數嗎?往下看,就是這麼簡單!題目python中生成隨機整數、隨機小數、0--1之間小數方法代碼先上代碼~運行效果題目詳述程序分析:隨機整數:random.randint(a,b),生成區間內的整數隨機小數:習慣用numpy庫,利用np.random.randn(5)生成5個隨機小數0-1隨機小數
  • Frintr.com:有意思的馬賽克作圖體驗
    ,將你及好友的圖片做成馬賽克,意在體現SNS的價值。Frintr.com:有意思的馬賽克作圖體驗相信很多人對於馬賽克(mosaic)圖片都不陌生,偶爾你也會將自己的頭像做個馬賽克效果,與朋友進行分享。今天所介紹的網站Frintr.com就專注於提供馬賽克圖片創作,不同的是Frintr.com會融合更多地SNS元素,除了常規的分享、傳播外,Frintr.com更神奇的地方在於馬賽克那一小塊一小塊的可都是來自你朋友的圖片哦。
  • 用Python做特效,分分鐘碾壓五毛黨
    用paddlehub摳圖。我們這裡直接用pip安裝cpu版本的:# 安裝paddlepaddlepython -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple# 安裝paddlehub