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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于OpenCV的DNN圖像風格遷移

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-10-30 10:03 ? 次閱讀

圖像風格遷移已經(jīng)屬于比較成熟的領域了,現(xiàn)在連實時的風格遷移都不成問題。之前一直想出一篇這樣的文章,但無奈于大部分開源項目配置起來非常麻煩,比如 luanfujun/deep-photo-styletransfer 項目,需要安裝 CUDA、pytorch、cudnn等等,配置能花一天的時間。

不過最近我發(fā)現(xiàn)一個非常好的開源應用項目,那就是基于OpenCV的DNN圖像風格遷移。你只需要安裝OpenCV就可以使用。

它也有局限性,我們只能用別人訓練好的模型進行風格遷移,如果我們要自定義風格,那就必須配置cudn等工具,使用 deep-photo-styletransfer 等項目的方法進行訓練。

不過作為初學者,我們只需要體驗一下這樣的風格遷移算法即可。感興趣的同學可以再自己深入研究。今天的教程我們拿 fast-neural-style 訓練好的模型對下面的圖片做一次風格遷移。

1.準備

開始之前,你要確保Pythonpip已經(jīng)成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細Python安裝指南 進行安裝。

**(可選1) **如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內置了Python和pip.

**(可選2) **此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點:Python 編程的最好搭檔—VSCode 詳細指南。

請選擇以下任一種方式輸入命令安裝依賴

  1. Windows 環(huán)境 打開 Cmd (開始-運行-CMD)。
  2. MacOS 環(huán)境 打開 Terminal (command+空格輸入Terminal)。
  3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install python-opencv

2.選擇模型

fast-neural-style放出的模型風格一共有9種,我們將一一嘗試,其中部分風格如下比如:
3.克隆OpenCV源碼

我們直接克隆OpenCV開源項目中關于DNN圖像遷移的例子,地址是:
https://github.com/opencv/opencv/blob/3.4.0/samples/dnn/fast_neural_style.py

代碼:

import cv2 as cv
import numpy as np
import argparse

parser = argparse.ArgumentParser(
        description='This script is used to run style transfer models from '
                    'https://github.com/jcjohnson/fast-neural-style using OpenCV')
parser.add_argument('--input', help='Path to image or video. Skip to capture frames from camera')
parser.add_argument('--model', help='Path to .t7 model')
parser.add_argument('--width', default=-1, type=int, help='Resize input to specific width.')
parser.add_argument('--height', default=-1, type=int, help='Resize input to specific height.')
parser.add_argument('--median_filter', default=0, type=int, help='Kernel size of postprocessing blurring.')
args = parser.parse_args()

net = cv.dnn.readNetFromTorch(args.model)

if args.input:
    cap = cv.VideoCapture(args.input)
else:
    cap = cv.VideoCapture(0)

cv.namedWindow('Styled image', cv.WINDOW_NORMAL)
while cv.waitKey(1) < 0:
    hasFrame, frame = cap.read()
    if not hasFrame:
        cv.waitKey()
        break

    inWidth = args.width if args.width != -1 else frame.shape[1]
    inHeight = args.height if args.height != -1 else frame.shape[0]
    inp = cv.dnn.blobFromImage(frame, 1.0, (inWidth, inHeight),
                              (103.939, 116.779, 123.68), swapRB=False, crop=False)

    net.setInput(inp)
    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)

    t, _ = net.getPerfProfile()
    freq = cv.getTickFrequency() / 1000
    print t / freq, 'ms'

    if args.median_filter:
        out = cv.medianBlur(out, args.median_filter)

    cv.imshow('Styled image', out)

注意,源代碼是基于Python2的,所以第46行少了括號,如果你是Python3請注意補上括號。

這份代碼可以直接使用, parser 里定義了5個參數(shù),--input輸入要遷移的圖像寬度和高度, median_filter 是中值濾波器, 基本思想是用像素點鄰域灰度值的中值來代替該像素點的灰度值 ,因此理論上數(shù)值越大,圖像越平滑,輸出的結果細節(jié)越好(不確定)。

親自試了一下median_filter對圖像的影響,發(fā)現(xiàn)改變微乎其微,因此直接為默認值即可。

4.開始遷移

將第二步的代碼保存到一個文件中,命名為1.py,在CMD/Terminal中帶參數(shù)運行腳本,其中input是源圖像路徑,model是遷移的風格模型文件,如運行:

python 1.py --input 1.jpg --model udnie.t7
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 模型
    +關注

    關注

    1

    文章

    3112

    瀏覽量

    48660
  • 編輯器
    +關注

    關注

    1

    文章

    800

    瀏覽量

    31055
  • OpenCV
    +關注

    關注

    29

    文章

    624

    瀏覽量

    41214
  • dnn
    dnn
    +關注

    關注

    0

    文章

    59

    瀏覽量

    9033
收藏 人收藏

    評論

    相關推薦

    關于深度學習中的圖像處理應用

    神經(jīng)風格遷移(NST,Neural Style Transfe) 神經(jīng)風格遷移是指將參考圖像風格
    發(fā)表于 08-06 16:52 ?1880次閱讀

    教你如何用OpenCV、Python和深度學習技術對圖像和實時視頻進行神經(jīng)風格遷移

    雖然Gatys等人的方法能生成不錯的神經(jīng)風格遷移結果,但是它的速度非常慢。2016年,Johnson等人在Gatys的基礎上提出的全新算法速度快了三倍,但同時也存在著缺點,即用戶不能隨機選擇想要應用的風格
    的頭像 發(fā)表于 08-31 09:47 ?7578次閱讀

    使用全卷積網(wǎng)絡模型實現(xiàn)圖像分割

    OpenCv-C++-深度神經(jīng)網(wǎng)絡(DNN)模塊-使用FCN模型實現(xiàn)圖像分割
    發(fā)表于 05-28 07:33

    【洞幺邦】基于深度學習的GAN應用風格遷移

    和虛假,最后兩者到達動態(tài)的平和的時候,生成網(wǎng)絡G就可以生成以假亂真的圖片了。GAN應用風格遷移:在最一開始那個吶喊的例子中,人類騎行的圖像通過組合風格
    發(fā)表于 07-01 10:53

    【飛凌嵌入式OKMX8MP-C 開發(fā)板試用體驗】OpenCV-DNN移植&使用體驗(基于YOLOV3模型識別物體)

    OpenCV-DNN攝像頭圖像實時識別物品的Demo,從網(wǎng)上下載coco.names(物品類名稱文件),yolov3.cfg(YOLOV3配置文件),yolov3.weights(YOLOV3模型
    發(fā)表于 02-21 00:22

    遷移學習

    、目標檢測、行人重識別等任務中的應用,學習圖像/視頻風格遷移方法,了解風格遷移在實際生活中的應用。七、小樣本學習、Transformer等前
    發(fā)表于 04-21 15:15

    【飛凌RK3568開發(fā)板試用體驗】使用OpenCV進行人臉識別

    RK3568四核Arm Cortex-A55 處理器的主板,從廠商的宣傳看,其主要市場就是人臉識別等視頻和圖像應用。今天就使用OpenCV自帶的DNN模塊進行人臉識別,看看其性能如何。一、Op
    發(fā)表于 01-11 22:06

    ?多模態(tài)風格遷移——生成更加美麗動人的風格圖像

    基于卷積的圖像風格遷移主要利用兩種方法來對特征進行表示,一種假設全局具有相同分布并用全局特征來表風格,另一種則基于圖像片提取
    的頭像 發(fā)表于 05-01 14:11 ?4738次閱讀

    OpenCV新版本4.5.1發(fā)布

    ,以方便再網(wǎng)頁中使用,并提供了相關教程。 圖像分類 ? 目標檢測 ? 風格遷移 ? 語義分割 ? 姿態(tài)估計 2. OpenCV.js?WASM SIMD?優(yōu)化 2.0,網(wǎng)頁端調用
    的頭像 發(fā)表于 12-31 09:47 ?2722次閱讀

    邊緣環(huán)境下DNN應用的計算遷移調度綜述

    深度神經(jīng)網(wǎng)絡(Deυ Neural Network,DNN)應用對運行設備的性能要求較高,無法直接在計算資源受限的移動設備上運行。通過計算遷移技術將某些計算復雜的神經(jīng)網(wǎng)絡層遷移到資源豐富的邊緣或者
    發(fā)表于 05-10 14:01 ?3次下載

    手把手教你使用LabVIEW OpenCV DNN實現(xiàn)手寫數(shù)字識別(含源碼)

    在LabVIEW中如何使用OpenCV DNN模塊實現(xiàn)手寫數(shù)字識別
    的頭像 發(fā)表于 03-08 16:10 ?1629次閱讀

    手把手教你使用LabVIEW OpenCV dnn實現(xiàn)圖像分類(含源碼)

    使用LabVIEW OpenCV dnn實現(xiàn)圖像分類
    的頭像 發(fā)表于 03-09 13:37 ?1196次閱讀

    PyTorch教程14.12之神經(jīng)風格遷移

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程14.12之神經(jīng)風格遷移.pdf》資料免費下載
    發(fā)表于 06-05 11:21 ?0次下載
    PyTorch教程14.12之神經(jīng)<b class='flag-5'>風格</b><b class='flag-5'>遷移</b>

    PyTorch教程-14.12. 神經(jīng)風格遷移

    個方面。要為照片應用理想的風格,您可能需要嘗試多種不同的濾鏡組合。這個過程與調整模型的超參數(shù)一樣復雜。 在本節(jié)中,我們將利用 CNN 的分層表示將一幅圖像風格自動應用到另一幅圖像,
    的頭像 發(fā)表于 06-05 15:44 ?640次閱讀
    PyTorch教程-14.12. 神經(jīng)<b class='flag-5'>風格</b><b class='flag-5'>遷移</b>

    基于OpenCV DNN實現(xiàn)YOLOv8的模型部署與推理演示

    基于OpenCV DNN實現(xiàn)YOLOv8推理的好處就是一套代碼就可以部署在Windows10系統(tǒng)、烏班圖系統(tǒng)、Jetson的Jetpack系統(tǒng)
    的頭像 發(fā)表于 03-01 15:52 ?1334次閱讀
    基于<b class='flag-5'>OpenCV</b> <b class='flag-5'>DNN</b>實現(xiàn)YOLOv8的模型部署與推理演示