使用Python+OpenCV實現照片風格遷移及原始碼

導讀:本文教你使用Python, OpenCV, 使用李飛飛團隊的風格遷移模型實現照片的風格遷移

一、基本思路

使用OpenCV讀入原始照片,使用cv2。dnn。readNetFromTorch()方法讀取預訓練的風格遷移模型,將原始圖片構建成一個blob,輸入網路,執行一次前饋計算,再做一些細節處理即可。不多說,直接上程式碼。

二、實現程式碼

import cv2path_source=‘。。。/00003。jpg’ #原始圖片的路徑path_dest=‘。。。/result_00003。jpg’ #風格化圖片的儲存路徑#模型風格:‘mosaic。t7’, ‘la_muse。t7’,‘starry_night。t7’,the_scream。t7‘, ’udnie。t7‘,# ’the_wave。t7‘, ’candy。t7‘, ’composition_vii。t7‘, ’feathers。t7‘, ’la_muse1。t7‘path_model=’。。。/la_muse。t7‘ #預訓練模型的路徑jpg_quality=80# 0-100,設定輸出圖片的質量,預設80,越大圖片質量越好# 讀入原始圖片,獲取圖片的寬度和高度img = cv2。imread(path_source)(h, w) = img。shape[:2]#從本地載入預訓練模型net = cv2。dnn。readNetFromTorch(path_model)# 將圖片構建成一個blob:設定圖片尺寸,將各通道畫素值減去平均值## 然後執行一次前饋網路計算blob = cv2。dnn。blobFromImage(img, 1。0, (w, h), (103。939, 116。779, 123。680), swapRB=False, crop=False)net。setInput(blob)output = net。forward()##reshape輸出結果, 將減去的平均值加回來,並交換各顏色通道output = output。reshape((3, output。shape[2], output。shape[3]))output[0] += 103。939output[1] += 116。779output[2] += 123。680output = output。transpose(1, 2, 0)# 輸出風格化後的圖片cv2。imwrite(path_dest, output, [int(cv2。IMWRITE_JPEG_QUALITY), jpg_quality])

三、實現效果

下面上三張圖,它們使用了不同的風格遷移模型。總共有10種風格模型噢。

使用Python+OpenCV實現照片風格遷移及原始碼

使用Python+OpenCV實現照片風格遷移及原始碼

使用Python+OpenCV實現照片風格遷移及原始碼

如果把一段影片的每幀都進行風格遷移,還可以製作有風格遷移效果的影片,只是需要花費點時間。本號以前釋出的有風格遷移影片,

泰坦尼克號風格遷移影片,藝術般經典再現

,歡迎觀看效果。

快動手製作一個屬於自己的風格遷移照片吧。關注、評論、轉發,獲取風格遷移模型下載地址。