现在很多人都喜欢拍照(自拍)。有限的滤镜和装饰玩多了也会腻,所以就有 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

目录下通过执行命令运行代码:

python fast_neural_style.py --model starry_night.t7

model 参数是提供预先训练好的模型文件路径,OpenCV 没有提供下载,但给出的参考项目 https://github.com/jcjohnson/fast-neural-style 中可以找到

其他可设置参数有:

input 可以指定原始图片/视频,如果不提供就默认使用摄像头实时采集。
width、height,调整处理图像的大小,设置小一点可以提高计算速度。在我自己的电脑上,300x200 的转换视频可以达到 15 帧/秒。
median_filter 中值滤波的窗口大小,用来对结果图像进行平滑处理,这个对结果影响不大。
执行后的效果(取自 jcjohnson/fast-neural-style):
核心代码其实很短,就是 加载模型 -> 读取图片 -> 进行计算 -> 输出图片,我在官方示例基础上进一步简化了一下:`在这里插入代码片

---------------------------------------------------------------
注:我这有个学习基地,里面有很多学习资料,感兴趣的+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)
# 进行计算
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)

执行结果:

另外还改了个多效果实时对比的版本(计算量大了,很卡顿),也一并上传在代码中。

Python+OpenCV 十几行代码模仿世界名画相关推荐

  1. python画自己的名字_Python+OpenCV 十几行代码模仿世界名画

    原标题:Python+OpenCV 十几行代码模仿世界名画 现在很多人都喜欢拍照(自拍).有限的滤镜和装饰玩多了也会腻,所以就有 APP 提供了模仿名画风格的功能,比如 prisma.versa 等, ...

  2. opencv python是什么_Python+OpenCV 十几行代码模仿世界名画

    现在很多人都喜欢拍照(自拍).有限的滤镜和装饰玩多了也会腻,所以就有 APP 提供了模仿名画风格的功能,比如 prisma.versa 等,可以把你的照片变成梵高.毕加索.蒙克等大师的风格. 这种功能 ...

  3. python控制视频播放器的大小与位置_python_十几行代码实现简单播放器

    python20行代码实现简单播放器 播放器简介 播放器大家都并不陌生,我们听音乐,我们看视频都会用到.那么播放器实现的功能到底有哪些呢?一个播放器一般来讲都完成了如下步骤: 读取文件(包括音频文件和 ...

  4. python开发视频播放器_python_十几行代码实现简单播放器

    python20行代码实现简单播放器 播放器简介 播放器大家都并不陌生,我们听音乐,我们看视频都会用到.那么播放器实现的功能到底有哪些呢?一个播放器一般来讲都完成了如下步骤: 读取文件(包括音频文件和 ...

  5. python语言写视频播放器-python_十几行代码实现简单播放器

    python20行代码实现简单播放器 播放器简介 播放器大家都并不陌生,我们听音乐,我们看视频都会用到.那么播放器实现的功能到底有哪些呢?一个播放器一般来讲都完成了如下步骤: 读取文件(包括音频文件和 ...

  6. 谷歌为什么把几十亿行代码放在一个库?

    <ACM通信>有一篇论文<为什么 Google 要把几十亿行代码放在一个库?>,作者是谷歌基础设施小组的工程师.作者详细讲述了Google的代码为什么全部放在一个库里面. 一. ...

  7. Google 为什么把几十亿行代码放在一个库

    <ACM通信>有一篇论文<为什么 Google 要把几十亿行代码放在一个库?>,作者是谷歌基础设施小组的工程师.作者详细讲述了Google的代码为什么全部放在一个库里面. 一. ...

  8. postman怎么传session_十几行代码实现分布式 Session

    前言 最近喊同事吃饭的时候他在测接口,于是我就在他后面等了一会.他测的是一个需要登录的接口,步骤如下 1.先登录系统从接口的request head中拿到cookie的值 2.把这个cookie的值粘 ...

  9. python小游戏-16行代码实现3D撞球小游戏!-源码下载

    python小游戏-16行代码实现3D撞球小游戏!-源码下载 所属网站分类: 资源下载 > python小游戏 作者:搞笑 链接: http://www.pythonheidong.com/bl ...

最新文章

  1. 数据结构课程上机参考代码
  2. DIV+CSS圆角边框
  3. 不越狱无硬件,轻松搞定iPhone投影与录屏
  4. 腾讯面试官:如何停止一个正在运行的线程?我一脸蒙蔽。。。
  5. WatchOS系统开发大全(3)-创建第一个WatchApp工程
  6. .Net软件工程师必备面试题134道
  7. 计算机毕业设计Java演出票在线预定网站系统(源码+系统+mysql数据库+Lw文档)
  8. 使用PMSM控制的puma560机械臂简单轨迹跟踪
  9. server2012R2VC++2015 redistributable安装出错KB2999226-x64.msu 此更新不适合你的计算机
  10. Servlet+jsp入门教程
  11. 计算机算法相关英文词汇,2021计算机算法相关术语的英语词汇
  12. 终端信息管理专家简介
  13. 2018年第九届蓝桥杯大赛软件类省赛C/C++B组参赛感想
  14. css开启3d加速的属性,开启3D加速,提高游戏速度
  15. 解决 xftp 远程目录显示乱码
  16. AutoCAD清理顽固图层的方法
  17. linux 原型软件,7款免费原型设计工具,总有一款是你的菜!
  18. 《中国人工智能系列白皮书——智能驾驶》精编
  19. 计算机有线传播介质,有线传输介质有那些?
  20. 【检测与估计理论(Detection and Estimation Theory)】一、估计简介(Introduction of Estimation)

热门文章

  1. java.lang.IllegalStateException: PathVariable/RequestParam annotation was empty on param 0.
  2. python初学火车座位判断_Python学习第三课 判断(if)语句
  3. Linux——top命令查看cpu利用率超过100%
  4. 【项目实战】mybatis +vue.js 前后端交互批量删除
  5. 操作系统 课堂练习题02【8道 经典题目】
  6. PHP反序列化漏洞总结
  7. 大量数据生成excel时候造成jvm内存泄漏问题的解决与测
  8. 怎么做 慢充 话费_高佣联盟充值话费省钱小技巧教程
  9. 大学计算机英语专业感想感知,非英语专业大学生英语感知学习风格研究
  10. Linux下安装Oracle遇到的错误