日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Python+OpenCV 十几行代码模仿世界名画

發(fā)布時(shí)間:2024/9/30 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python+OpenCV 十几行代码模仿世界名画 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

現(xiàn)在很多人都喜歡拍照(自拍)。有限的濾鏡和裝飾玩多了也會(huì)膩,所以就有 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)格化圖像。
而因?yàn)樯窠?jīng)網(wǎng)絡(luò)在計(jì)算機(jī)視覺方面的應(yīng)用越來越廣,著名的視覺開發(fā)庫 OpenCV 在 3.3 版本中正式引入 DNN(深度神經(jīng)網(wǎng)絡(luò)),支持 Caffe、TensorFlow、Torch/PyTorch 等主流框架的模型,可用以實(shí)現(xiàn)圖像的識別、檢測、分類、分割、著色等功能。

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

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

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

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

python fast_neural_style.py --model starry_night.t7

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

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

input 可以指定原始圖片/視頻,如果不提供就默認(rèn)使用攝像頭實(shí)時(shí)采集。
width、height,調(diào)整處理圖像的大小,設(shè)置小一點(diǎn)可以提高計(jì)算速度。在我自己的電腦上,300x200 的轉(zhuǎn)換視頻可以達(dá)到 15 幀/秒。
median_filter 中值濾波的窗口大小,用來對結(jié)果圖像進(jìn)行平滑處理,這個(gè)對結(jié)果影響不大。
執(zhí)行后的效果(取自 jcjohnson/fast-neural-style):
核心代碼其實(shí)很短,就是 加載模型 -> 讀取圖片 -> 進(jìn)行計(jì)算 -> 輸出圖片,我在官方示例基礎(chǔ)上進(jìn)一步簡化了一下:`在這里插入代碼片

--------------------------------------------------------------- 注:我這有個(gè)學(xué)習(xí)基地,里面有很多學(xué)習(xí)資料,感興趣的+Q群:895817687 ---------------------------------------------------------------import cv2 # 加載模型 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)行計(jì)算 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('Styled image', out) cv2.waitKey(0)

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

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

總結(jié)

以上是生活随笔為你收集整理的Python+OpenCV 十几行代码模仿世界名画的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。