现在很多人都喜欢拍照(自拍)。有限的滤镜和装饰玩多了也会腻,所以就有 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
目录下通过执行命令运行代码:
pythonfast_neural_style.py--modelstarry_night.t7
model参数是提供预先训练好的模型文件路径,OpenCV 没有提供下载,但给出的参考项目 https://github.com/jcjohnson/fast-neural-style 中可以找到
其他可设置参数有:
-
input可以指定原始图片/视频,如果不提供就默认使用摄像头实时采集。
-
width、height,调整处理图像的大小,设置小一点可以提高计算速度。在我自己的电脑上,300x200 的转换视频可以达到 15 帧/秒。
-
median_filter中值滤波的窗口大小,用来对结果图像进行平滑处理,这个对结果影响不大。
执行后的效果(取自 jcjohnson/fast-neural-style):
原始图像
ECCV16 models
instance_norm models
核心代码其实很短,就是加载模型 -> 读取图片 -> 进行计算 -> 输出图片,我在官方示例基础上进一步简化了一下:
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) #进行计算 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)
执行结果:
另外还改了个多效果实时对比的版本(计算量大了,很卡顿),也一并上传在代码中。
PS:前两天看赵雷演唱会的时候我还说:他演唱会的背景 MV 大量使用了 图像二值化、边缘检测 等操作,让我想到以前数字图像处理课的大作业……现在图像风格迁移的效率达到了实时,想必以后也会经常被使用吧
参考文献:
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实现图像和视频的风格迁移(译) - 论智 Bing
https://mp.weixin.qq.com/s/KXA6b-ckttBSQR5DvS3SBg
可以用 Python 编程语言做哪些神奇好玩的事情?- 知乎回答 @杨航锋
https://www.zhihu.com/question/21395276/answer/115805610
用processing代码模仿梵高画杨超越 - 算法艺术实验室AALab Alice
https://mp.weixin.qq.com/s/UOVww7IgCteuQ6Bsbf0yEA
-
神经网络
+关注
关注
42文章
4762浏览量
100535 -
机器视觉
+关注
关注
161文章
4343浏览量
120106 -
OpenCV
+关注
关注
30文章
628浏览量
41260
发布评论请先 登录
相关推荐
评论