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

    文章

    4762

    浏览量

    100535
  • 机器视觉
    +关注

    关注

    161

    文章

    4343

    浏览量

    120106
  • OpenCV
    +关注

    关注

    30

    文章

    628

    浏览量

    41260
收藏 人收藏

    评论

    相关推荐

    如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板

    提供了一个非常简单的接口,用于相机捕捉一个视频(我用的电脑内置摄像头) 1、安装python3-opencv apt install python3-opencv 2、查看摄像头支持的格式与分辨率
    发表于 11-15 17:58

    手写图像模板匹配算法在OpenCV中的实现

    OpenCV中的模板匹配是支持基于NCC相似度查找的,但是不是很好用,一个主要的原因是查找最大阈值,只能匹配一个,自己比对阈值,又导致无法正确设定阈值范围,所以问题很多。于是我重新写了纯Python版本的NCC图像模板匹配的代码
    的头像 发表于 11-11 10:12 165次阅读
    手写图像模板匹配算法在<b class='flag-5'>OpenCV</b>中的实现

    使用Python进行图像处理

    下面是一个关于使用Python几行代码中分析城市轮廓线的快速教程。
    的头像 发表于 11-07 10:14 140次阅读
    使用<b class='flag-5'>Python</b>进行图像处理

    OpenCV图像识别C++代码

    安装OpenCV库 首先,您需要在您的计算机上安装OpenCV库。您可以从OpenCV官网下载预编译的库或从源代码编译。安装完成后,确保将OpenC
    的头像 发表于 07-16 10:42 1791次阅读

    opencv-pythonopencv一样吗

    不一样。OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它提供了大量的图像和视频处理功能。OpenCV-Python
    的头像 发表于 07-16 10:38 969次阅读

    ESP32S3进入低功耗模式后十几秒就自动重启,一直循环十几秒重启一次,怎么解决?

    on APP CPU. I (205) TAG: 由0唤醒 I (205) TAG: 进入低功耗 问题如下: 进入低功耗模式后十几秒就自动重启,一直循环十几秒重启一次,重启打印都是“由0唤醒
    发表于 06-06 06:42

    STM32G030 ADC开启后STOP模式多十几微安电流,为什么?

    STM32G030 ADC开启后 STOP模式 多十几微安电流,加了ADC1_COMMON->CCR= ~(ADC_CCR_VBATEN | ADC_CCR_TSEN | ADC_CCR_VREFEN | ADC_CCR_PRESC);后能降10ua
    发表于 03-20 08:06

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

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

    Python智能家居系统代码介绍

    Python智能家居系统是一种基于Python编程语言开发的智能家居控制系统,在现代家庭中得到了越来越广泛的应用。本文将详细介绍Python智能家居系统的代码实现,包括系统的结构与功能
    的头像 发表于 01-25 09:46 1265次阅读

    Linux下常见的十几款CPU监控工具

    今天浩道跟大家分享运维工作中,Linux下常见的十几款CPU监控工具,你可能只会用到其中某些,但是个人觉得作为一个资深运维,你要知道有这些工具可以监控CPU。
    的头像 发表于 01-22 09:19 2413次阅读
    Linux下常见的<b class='flag-5'>十几</b>款CPU监控工具

    十几年电工有必要学plc吗

    在过去的十几年里,电工作为电力行业的重要一环,承担着维修和安装电气设备的重要任务。然而,随着科技的迅猛发展,传统的电工技能已经逐渐无法满足产业发展的需求。
    的头像 发表于 12-26 11:41 741次阅读

    OpenCV4.8 CUDA编程代码教程

    OpenCV4支持通过GPU实现CUDA加速执行,实现对OpenCV图像处理程序的加速运行,当前支持加速的模块包括如下。
    的头像 发表于 12-05 09:56 985次阅读
    <b class='flag-5'>OpenCV</b>4.8 CUDA编程<b class='flag-5'>代码</b>教程

    python运行指定几行

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

    python软件IDLE怎么打多行代码

    用于编写、编辑和运行Python代码的编辑器窗口。在IDLE中编写多行代码有几种方法可以实现。 使用括号与换行符: 在IDLE中编写多行代码的一种常见方法是使用括号来将多行
    的头像 发表于 11-29 15:00 3942次阅读

    python软件怎么运行代码

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