ホームページ  >  記事  >  バックエンド開発  >  Python+OpenCVの画像スタイル移行の実装方法の説明

Python+OpenCVの画像スタイル移行の実装方法の説明

不言
不言転載
2018-10-16 14:21:405139ブラウズ

この記事では、Python OpenCV のイメージ スタイル移行の実装方法について説明します。一定の参考価値があります。必要な友人は参考にしてください。お役に立てれば幸いです。

現在、多くの人が写真 (セルフィー) を撮るのが好きです。限られたフィルターや装飾で遊びすぎると飽きてしまうので、写真を ## に変身させるプリズマやバーサなど、有名な画風を模倣する機能を備えたアプリもあります。 #ゴッホ、ピカソやムンクなどの巨匠のスタイル

Python+OpenCVの画像スタイル移行の実装方法の説明この機能は「

Image Style Transfer

」と呼ばれるもので、ほぼすべて CVPR 2015 の論文「##」に基づいています。 #A これは、芸術スタイルのニューラル アルゴリズム および ECCV 2016 論文「リアルタイム スタイル転送と超解像度のための知覚損失」で提案されたアルゴリズム、およびその後の関連アルゴリズムに基づいて開発されました。研究。 平たく言えば、ニューラル ネットワーク

を使用して有名な絵画のスタイルをモデルに事前学習し、それをさまざまな写真に適用して新しい様式化された画像を生成することです。

「芸術的なスタイルのニューラル アルゴリズム」より Python+OpenCVの画像スタイル移行の実装方法の説明

そして、ニューラル ネットワークはコンピュータ ビジョンでますます使用されているため、有名なビジュアル開発ライブラリ OpenCV は、バージョン 3.3 で

DNN (ディープ ニューラル ネットワーク)

を正式に導入し、Caffe、TensorFlow、Torch/PyTorch などの主流フレームワークのモデルをサポートし、画像認識、検出、分類、セグメンテーション、色分け、その他の機能。

最近、OpenCV のサンプル コード (後知恵をお許しください) に画像スタイル転送の 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.t7

model

パラメーターは、事前トレーニングされたモデル ファイルへのパスを指定します。 OpenCV はダウンロードを提供しませんが、リファレンス プロジェクト https://github.com/jcjohnson/fast-neural-style

その他の設定可能なパラメータは次のとおりです。

##input

元の画像/ビデオを指定できます。指定しない場合は、デフォルトでカメラを使用してリアルタイムでキャプチャされます。

  • width

    height
  • 、処理された画像のサイズを調整します。サイズを小さく設定すると、計算速度が向上します。私のコンピューターでは、300x200 に変換されたビデオは 15 fps に達します。
  • median_filter メディアン フィルターのウィンドウ サイズは、結果の画像を滑らかにするために使用されますが、結果にはほとんど影響しません。

  • 実行後の効果 (jcjohnson/fast-neural-style から抜粋):

オリジナル画像

Python+OpenCVの画像スタイル移行の実装方法の説明

ECCV16 モデル

Python+OpenCVの画像スタイル移行の実装方法の説明


##instance_norm モデル

コア コードは実際には非常に短く、

モデルをロードする->画像を読み取る->計算する->画像を出力するです。公式の例に基づいてさらに簡略化しました。 :Python+OpenCVの画像スタイル移行の実装方法の説明

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)
# 进行计算
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)
また、複数のエフェクトをリアルタイムに比較するバージョン(計算量が多くて非常に遅い)を修正し、コード内にアップロードしました。

追記: 2日前にZhao Leiのコンサートを観たとき、私も言いました:背景のMVがたくさんあります画像の二値化やエッジ検出などの操作は、昔のデジタル画像処理の授業での大きな課題を思い出させます...画像スタイルの転送効率がリアルタイムに達した今、それは実現されると思います今後も頻繁に使用されます。

Python+OpenCVの画像スタイル移行の実装方法の説明

以上がPython+OpenCVの画像スタイル移行の実装方法の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。