0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python+OpenCV 十幾行代碼模仿世界名畫

人工智能精選 ? 2018-10-15 15:50 ? 次閱讀

現(xiàn)在很多人都喜歡拍照(自拍)。有限的濾鏡和裝飾玩多了也會膩,所以就有 APP 提供了模仿名畫風(fēng)格的功能,比如 prisma、versa 等,可以把你的照片變成梵高、畢加索、蒙克等大師的風(fēng)格。

這種功能叫做“圖像風(fēng)格遷移”,幾乎都是基于 CVPR 2015 的論文《A Neural Algorithm of Artistic Style》和 ECCV 2016 的論文《Perceptual Losses for Real-Time Style Transfer and Super-Resolution》中提出的算法,以及后續(xù)相關(guān)研究的基礎(chǔ)上開發(fā)出來的。

通俗來講,就是借助于神經(jīng)網(wǎng)絡(luò),預(yù)先將名畫中的風(fēng)格訓(xùn)練成出模型,在將其應(yīng)用在不同的照片上,生成新的風(fēng)格化圖像。

而因為神經(jīng)網(wǎng)絡(luò)在計算機(jī)視覺方面的應(yīng)用越來越廣,著名的視覺開發(fā)庫 OpenCV 在 3.3 版本中正式引入DNN(深度神經(jīng)網(wǎng)絡(luò)),支持 Caffe、TensorFlow、Torch/PyTorch 等主流框架的模型,可用以實現(xiàn)圖像的識別、檢測、分類、分割、著色等功能。

我最近才發(fā)現(xiàn)在 OpenCV 的 Sample 代碼中就有圖像風(fēng)格遷移的 Python 示例(原諒我的后知后覺),是基于 ECCV 2016 論文中的網(wǎng)絡(luò)模型實現(xiàn)。所以,即使作為人工智能的菜鳥,也可以拿別人訓(xùn)練好的模型來玩一玩,體會下神經(jīng)網(wǎng)絡(luò)的奇妙。

(相關(guān)代碼和模型的獲取見文末)

OpenCV 官方代碼地址:https://github.com/opencv/opencv/blob/3.4.0/samples/dnn/fast_neural_style.py

目錄下通過執(zhí)行命令運行代碼:

pythonfast_neural_style.py--modelstarry_night.t7

model參數(shù)是提供預(yù)先訓(xùn)練好的模型文件路徑,OpenCV 沒有提供下載,但給出的參考項目 https://github.com/jcjohnson/fast-neural-style 中可以找到

其他可設(shè)置參數(shù)有:

  • input可以指定原始圖片/視頻,如果不提供就默認(rèn)使用攝像頭實時采集。

  • width、height,調(diào)整處理圖像的大小,設(shè)置小一點可以提高計算速度。在我自己的電腦上,300x200 的轉(zhuǎn)換視頻可以達(dá)到 15 幀/秒。

  • median_filter中值濾波的窗口大小,用來對結(jié)果圖像進(jìn)行平滑處理,這個對結(jié)果影響不大。

執(zhí)行后的效果(取自 jcjohnson/fast-neural-style):

原始圖像

ECCV16 models

instance_norm models

核心代碼其實很短,就是加載模型 -> 讀取圖片 -> 進(jìn)行計算 -> 輸出圖片,我在官方示例基礎(chǔ)上進(jìn)一步簡化了一下:

importcv2
#加載模型
net=cv2.dnn.readNetFromTorch('the_scream.t7')
net.setPreferableBackend(cv2.dnn.DNN_BACKEND_OPENCV);
#讀取圖片
image=cv2.imread('test.jpg')
(h,w)=image.shape[:2]
blob=cv2.dnn.blobFromImage(image,1.0,(w,h),(103.939,116.779,123.680),swapRB=False,crop=False)
#進(jìn)行計算
net.setInput(blob)
out=net.forward()
out=out.reshape(3,out.shape[2],out.shape[3])
out[0]+=103.939
out[1]+=116.779
out[2]+=123.68
out/=255
out=out.transpose(1,2,0)
#輸出圖片
cv2.imshow('Styledimage',out)
cv2.waitKey(0)

執(zhí)行結(jié)果:

另外還改了個多效果實時對比的版本(計算量大了,很卡頓),也一并上傳在代碼中。

PS:前兩天看趙雷演唱會的時候我還說:他演唱會的背景 MV 大量使用了 圖像二值化、邊緣檢測 等操作,讓我想到以前數(shù)字圖像處理課的大作業(yè)……現(xiàn)在圖像風(fēng)格遷移的效率達(dá)到了實時,想必以后也會經(jīng)常被使用吧

參考文獻(xiàn):
fast-neural-style jcjohnson
https://github.com/jcjohnson/fast-neural-style

Perceptual Losses for Real-Time Style Transfer and Super-Resolution(ECCV 2016)
Justin Johnson, Alexandre Alahi, Li Fei-Fei

A Neural Algorithm of Artistic Style(CVPR 2015)
Leon A. Gatys, Alexander S. Ecker, Matthias Bethge

Neural Style Transfer with OpenCV - Adrian Rosebrock
https://www.pyimagesearch.com/2018/08/27/neural-style-transfer-with-opencv/

無需GPU,只用OpenCV和Python實現(xiàn)圖像和視頻的風(fēng)格遷移(譯) - 論智 Bing
https://mp.weixin.qq.com/s/KXA6b-ckttBSQR5DvS3SBg

可以用 Python 編程語言做哪些神奇好玩的事情?- 知乎回答 @楊航鋒
https://www.zhihu.com/question/21395276/answer/115805610

用processing代碼模仿梵高畫楊超越 - 算法藝術(shù)實驗室AALab Alice
https://mp.weixin.qq.com/s/UOVww7IgCteuQ6Bsbf0yEA

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4717

    瀏覽量

    100018
  • 機(jī)器視覺
    +關(guān)注

    關(guān)注

    161

    文章

    4266

    瀏覽量

    119559
  • OpenCV
    +關(guān)注

    關(guān)注

    29

    文章

    622

    瀏覽量

    41091
收藏 人收藏

    評論

    相關(guān)推薦

    OpenCV圖像識別C++代碼

    安裝OpenCV庫 首先,您需要在您的計算機(jī)上安裝OpenCV庫。您可以從OpenCV官網(wǎng)下載預(yù)編譯的庫或從源代碼編譯。安裝完成后,確保將OpenC
    的頭像 發(fā)表于 07-16 10:42 ?1103次閱讀

    opencv-pythonopencv一樣嗎

    不一樣。OpenCV(Open Source Computer Vision Library)是一個開源的計算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫,它提供了大量的圖像和視頻處理功能。OpenCV-Python
    的頭像 發(fā)表于 07-16 10:38 ?449次閱讀

    ESP32S3進(jìn)入低功耗模式后十幾秒就自動重啟,一直循環(huán)十幾秒重啟一次,怎么解決?

    on APP CPU. I (205) TAG: 由0喚醒 I (205) TAG: 進(jìn)入低功耗 問題如下: 進(jìn)入低功耗模式后十幾秒就自動重啟,一直循環(huán)十幾秒重啟一次,重啟打印都是“由0喚醒
    發(fā)表于 06-06 06:42

    itop-RK3588開發(fā)板機(jī)器視覺開發(fā)OpenCV-Python的安裝

    itop-RK3588開發(fā)板機(jī)器視覺開發(fā)OpenCV-Python的安裝
    的頭像 發(fā)表于 01-26 15:18 ?3255次閱讀
    itop-RK3588開發(fā)板機(jī)器視覺開發(fā)<b class='flag-5'>OpenCV-Python</b>的安裝

    Linux下常見的十幾款CPU監(jiān)控工具

    今天浩道跟大家分享運維工作中,Linux下常見的十幾款CPU監(jiān)控工具,你可能只會用到其中某些,但是個人覺得作為一個資深運維,你要知道有這些工具可以監(jiān)控CPU。
    的頭像 發(fā)表于 01-22 09:19 ?2306次閱讀
    Linux下常見的<b class='flag-5'>十幾</b>款CPU監(jiān)控工具

    十幾年電工有必要學(xué)plc嗎

    在過去的十幾年里,電工作為電力行業(yè)的重要一環(huán),承擔(dān)著維修和安裝電氣設(shè)備的重要任務(wù)。然而,隨著科技的迅猛發(fā)展,傳統(tǒng)的電工技能已經(jīng)逐漸無法滿足產(chǎn)業(yè)發(fā)展的需求。
    的頭像 發(fā)表于 12-26 11:41 ?633次閱讀

    OpenCV4.8 CUDA編程代碼教程

    OpenCV4支持通過GPU實現(xiàn)CUDA加速執(zhí)行,實現(xiàn)對OpenCV圖像處理程序的加速運行,當(dāng)前支持加速的模塊包括如下。
    的頭像 發(fā)表于 12-05 09:56 ?845次閱讀
    <b class='flag-5'>OpenCV</b>4.8 CUDA編程<b class='flag-5'>代碼</b>教程

    python運行指定幾行

    Python是一種高級編程語言,可以用于開發(fā)各種類型的應(yīng)用程序,包括網(wǎng)站、桌面應(yīng)用程序、數(shù)據(jù)分析和人工智能等。在Python中運行指定的幾行代碼
    的頭像 發(fā)表于 11-29 15:04 ?784次閱讀

    python軟件IDLE怎么打多行代碼

    用于編寫、編輯和運行Python代碼的編輯器窗口。在IDLE中編寫多行代碼有幾種方法可以實現(xiàn)。 使用括號與換行符: 在IDLE中編寫多行代碼的一種常見方法是使用括號來將多行
    的頭像 發(fā)表于 11-29 15:00 ?3204次閱讀

    python軟件怎么運行代碼

    Python是一種高級編程語言,它被廣泛用于開發(fā)各種類型的應(yīng)用程序,從簡單的腳本到復(fù)雜的網(wǎng)絡(luò)應(yīng)用和機(jī)器學(xué)習(xí)模型。要運行Python代碼,您需要一個Python解釋器,它可以將您的
    的頭像 發(fā)表于 11-28 16:02 ?746次閱讀

    python如何換行而不運行代碼

    Python程序中的換行是指在代碼中使用特定的語法來表示換行,以使代碼更易讀。換行的目的是為了讓程序更具可讀性并提高代碼的可維護(hù)性。然而,換行不會對程序的執(zhí)行產(chǎn)生任何影響,它只是改善了
    的頭像 發(fā)表于 11-24 09:50 ?2760次閱讀

    python代碼寫完后點哪個運行

    當(dāng)你完成了編寫Python代碼后,你可以選擇多種方式來運行它。下面是幾種常見的運行代碼的方式: Python解釋器:Python是一種解釋型
    的頭像 發(fā)表于 11-24 09:28 ?2848次閱讀

    python怎樣運行代碼

    討論Python代碼的運行方式,包括解釋器、交互式環(huán)境和命令行。 Python代碼可以通過兩種主要的方式運行:解釋執(zhí)行和編譯執(zhí)行。解釋執(zhí)行是指將源
    的頭像 發(fā)表于 11-22 10:31 ?991次閱讀

    OpenCV基礎(chǔ)知識入門

    OpenCV是計算機(jī)視覺中最受歡迎的庫,最初由intel使用C和C ++進(jìn)行開發(fā)的,現(xiàn)在也可以在python中使用。該庫是一個跨平臺的開源庫,是免費使用的。OpenCV庫是一個高度優(yōu)化的庫,主要關(guān)注實時應(yīng)用程序。
    的頭像 發(fā)表于 10-29 11:29 ?661次閱讀
    <b class='flag-5'>OpenCV</b>基礎(chǔ)知識入門

    【幸狐 Core3566 模組試用體驗】基于openCV的貓臉識別

    本文主要介紹如何基于openCV來實現(xiàn)一個簡單的貓臉識別應(yīng)用。 一、基礎(chǔ)準(zhǔn)備 首先需要安裝openCV,因為python版的方便點,所以直接安裝python
    發(fā)表于 09-24 23:50