0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

人工智能精选 2018-10-15 15:50 次阅读

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

    文章

    4538

    浏览量

    98424
  • 机器视觉
    +关注

    关注

    160

    文章

    3996

    浏览量

    118084
  • OpenCV
    +关注

    关注

    29

    文章

    609

    浏览量

    40710
收藏 人收藏

    评论

    相关推荐

    itop-RK3588开发板机器视觉开发OpenCV-Python的安装

    itop-RK3588开发板机器视觉开发OpenCV-Python的安装
    的头像 发表于 01-26 15:18 1062次阅读
    itop-RK3588开发板机器视觉开发<b class='flag-5'>OpenCV-Python</b>的安装

    python运行指定几行

    Python是一种高级编程语言,可以用于开发各种类型的应用程序,包括网站、桌面应用程序、数据分析和人工智能等。在Python中运行指定的几行代码十分简单,它不仅能够帮助程序员快速开发软
    的头像 发表于 11-29 15:04 315次阅读

    python软件怎么运行代码

    Python是一种高级编程语言,它被广泛用于开发各种类型的应用程序,从简单的脚本到复杂的网络应用和机器学习模型。要运行Python代码,您需要一个Python解释器,它可以将您的
    的头像 发表于 11-28 16:02 460次阅读

    python如何换行而不运行代码

    Python程序中的换行是指在代码中使用特定的语法来表示换行,以使代码更易读。换行的目的是为了让程序更具可读性并提高代码的可维护性。然而,换行不会对程序的执行产生任何影响,它只是改善了
    的头像 发表于 11-24 09:50 927次阅读

    python代码写完后点哪个运行

    当你完成了编写Python代码后,你可以选择多种方式来运行它。下面是几种常见的运行代码的方式: Python解释器:Python是一种解释型
    的头像 发表于 11-24 09:28 910次阅读

    python如何换行而不运行代码

    Python中,换行是一种用来增加代码的可读性和组织性的方式。当你在编写Python代码时,换行通常用于分隔不同的代码行或块,使其更易于阅
    的头像 发表于 11-22 10:52 918次阅读

    python怎样运行代码

    讨论Python代码的运行方式,包括解释器、交互式环境和命令行。 Python代码可以通过两种主要的方式运行:解释执行和编译执行。解释执行是指将源
    的头像 发表于 11-22 10:31 560次阅读

    OpenCV基础知识入门

    OpenCV是计算机视觉中最受欢迎的库,最初由intel使用C和C ++进行开发的,现在也可以在python中使用。该库是一个跨平台的开源库,是免费使用的。OpenCV库是一个高度优化的库,主要关注实时应用程序。
    的头像 发表于 10-29 11:29 348次阅读
    <b class='flag-5'>OpenCV</b>基础知识入门

    如何在开发环境中的Python环境下使用我们提供的BM-OpenCV?

    如何在开发环境中的Python环境下使用我们提供的BM-OpenCV?
    发表于 09-19 07:14

    无法在OpenVINO trade Docker中运行OpenCV怎么解决?

    * 函数的 Python* 推理脚本。cv2.VideoCapture 退货(错误,无) 分辨率 检查 系统是否真的安装了 OpenCV*: pip show opencv 还是 pip show
    发表于 08-15 08:29

    Python实现OpenCV的安装与使用

      本文实例讲述了 Python 实现 OpenCV 的安装与使用。分享给大家供 大家参考,具体如下:  由于下一步要开始研究下深度学习,而深度学习领域很多的算法和应 用都是用 Python 来实现
    发表于 07-20 11:46 7次下载

    python opencv运动检测代码分享

      本文实例为大家分享了 python opencv 运动检测的具体代码,供大家  参考,具体内容如下  # -*- coding:utf-8 -*-  __author__ = ‘kingking
    发表于 07-20 11:44 1次下载

    带有OpenCVPython的Google Chrome恐龙游戏

    电子发烧友网站提供《带有OpenCVPython的Google Chrome恐龙游戏.zip》资料免费下载
    发表于 07-05 11:46 0次下载
    带有<b class='flag-5'>OpenCV</b>和<b class='flag-5'>Python</b>的Google Chrome恐龙游戏

    [源代码]Python算法详解

    [源代码]Python算法详解[源代码]Python算法详解
    发表于 06-06 17:50 0次下载

    如何将RPi Python代码移植到ESP-01?

    努力尝试将我很久以前写的几行 RPi Python 代码移植到 ESP-01。 该代码预计会向 Pushover 发送事件警报并且它有效(到目前为止)。 由于 Micropython
    发表于 06-05 12:11