Python+OpenCV 十几行代码模仿世界名画
現在很多人都喜歡拍照(自拍)。有限的濾鏡和裝飾玩多了也會膩,所以就有 APP 提供了模仿名畫風格的功能,比如 prisma、versa 等,可以把你的照片變成 梵高、畢加索、蒙克 等大師的風格。
這種功能叫做“圖像風格遷移”,幾乎都是基于 CVPR 2015 的論文《A Neural Algorithm of Artistic Style》和 ECCV 2016 的論文《Perceptual Losses for Real-Time Style Transfer and Super-Resolution》中提出的算法,以及后續相關研究的基礎上開發出來的。
通俗來講,就是借助于神經網絡,預先將名畫中的風格訓練成出模型,在將其應用在不同的照片上,生成新的風格化圖像。
而因為神經網絡在計算機視覺方面的應用越來越廣,著名的視覺開發庫 OpenCV 在 3.3 版本中正式引入 DNN(深度神經網絡),支持 Caffe、TensorFlow、Torch/PyTorch 等主流框架的模型,可用以實現圖像的識別、檢測、分類、分割、著色等功能。
我最近才發現在 OpenCV 的 Sample 代碼中就有圖像風格遷移的 Python 示例(原諒我的后知后覺),是基于 ECCV 2016 論文中的網絡模型實現。所以,即使作為人工智能的菜鳥,也可以拿別人訓練好的模型來玩一玩,體會下神經網絡的奇妙。
(相關代碼和模型的獲取見文末)
OpenCV 官方代碼地址:https://github.com/opencv/opencv/blob/3.4.0/samples/dnn/fast_neural_style.py
目錄下通過執行命令運行代碼:
python fast_neural_style.py --model starry_night.t7model 參數是提供預先訓練好的模型文件路徑,OpenCV 沒有提供下載,但給出的參考項目 https://github.com/jcjohnson/fast-neural-style 中可以找到
其他可設置參數有:
input 可以指定原始圖片/視頻,如果不提供就默認使用攝像頭實時采集。
width、height,調整處理圖像的大小,設置小一點可以提高計算速度。在我自己的電腦上,300x200 的轉換視頻可以達到 15 幀/秒。
median_filter 中值濾波的窗口大小,用來對結果圖像進行平滑處理,這個對結果影響不大。
執行后的效果(取自 jcjohnson/fast-neural-style):
核心代碼其實很短,就是 加載模型 -> 讀取圖片 -> 進行計算 -> 輸出圖片,我在官方示例基礎上進一步簡化了一下:`在這里插入代碼片
執行結果:
另外還改了個多效果實時對比的版本(計算量大了,很卡頓),也一并上傳在代碼中。
總結
以上是生活随笔為你收集整理的Python+OpenCV 十几行代码模仿世界名画的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python Unittest-根据不同
- 下一篇: java -jar 和 java -cp