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

    文章

    4827

    浏览量

    106797
  • 机器视觉
    +关注

    关注

    163

    文章

    4728

    浏览量

    125008
  • OpenCV
    +关注

    关注

    33

    文章

    651

    浏览量

    44418
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    那些年我用OpenCV+Qt趟过哪些坑?写给视觉应用开发者的避坑指南

    前阵子,团队里新来的小伙子跑来找我,眉头紧锁。他手里的项目我清楚:一个基于摄像头的简单计数工具。Demo阶段用Python+OpenCV几行代码跑得飞快,准确率也好看。可一旦要打包成给产线工人用
    发表于 12-02 09:43

    那些年我用OpenCV+Qt趟过哪些坑?写给视觉应用开发者的避坑指南

    前阵子,团队里新来的小伙子跑来找我,眉头紧锁。他手里的项目我清楚:一个基于摄像头的简单计数工具。Demo阶段用Python+OpenCV几行代码跑得飞快,准确率也好看。可一旦要打包成给产线工人用
    的头像 发表于 12-02 09:40 110次阅读
    那些年我用<b class='flag-5'>OpenCV</b>+Qt趟过哪些坑?写给视觉应用开发者的避坑指南

    知乎开源“智能预渲染框架” 几行代码实现鸿蒙应用页面“秒开”

    ,交互延迟等核心痛点,通过智能预测用户浏览目标进行提前渲染,只需几行代码即可显著提升复杂页面的加载性能,实现“页面秒开”的高效体验,为鸿蒙开发者带来开发效率和用户体验的双重飞跃。 随着鸿蒙生态快速发展,应用开发者难免会遇到一些性能问题
    的头像 发表于 08-29 14:32 468次阅读
    知乎开源“智能预渲染框架” <b class='flag-5'>几行</b><b class='flag-5'>代码</b>实现鸿蒙应用页面“秒开”

    如何使用树莓派与OpenCV实现面部和运动追踪的云台系统?

    大家好,这是一个树莓派和OpenCV的连载专题。使用树莓派与OpenCV实现姿态估计和面部特征点追踪使用树莓派与OpenCV实现面部和运动追踪的云台系统使用树莓派和OpenCV实现手部
    的头像 发表于 08-14 17:45 957次阅读
    如何使用树莓派与<b class='flag-5'>OpenCV</b>实现面部和运动追踪的云台系统?

    【GM-3568JHF开发板免费体验】OpenCV开发环境安装和计数程序开发

    、 Android 等系统上运行,并通过Python接口简化操作。 sudo apt install libopencv-dev python3-opencv 四、OpenCV图像识别测试 使用
    发表于 08-09 13:30

    如何板端编译OpenCV并搭建应用--基于瑞芯微米尔RK3576开发板

    运行opencv代码,来完成一些视觉内容,充分发挥该板的性能。要先编译opencv需要一些预先的准备工作首先更新软件包并安装必要的依赖:sudo apt update sudo apt upgrade
    发表于 08-08 17:14

    【Milk-V Duo S 开发板免费体验】SDK编译、人脸检测、OpenCV测试

    CMakeLists.txt ESC + I 进入 Insert 模式,粘贴如下代码 project(opencv-mobile-test) cmake_minimum_required
    发表于 07-11 13:48

    如何在k230上运行OpenCV代码?

    如何在k230上运行OpenCV代码
    发表于 06-17 06:06

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

    摄像头)1、安装python3-opencvaptinstallpython3-opencv(左右移动查看全部内容)2、查看摄像头支持的格式与分辨率root@debi
    的头像 发表于 04-15 11:51 640次阅读
    如何用<b class='flag-5'>OpenCV</b>的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板

    快速部署!米尔全志T527开发板的OpenCV行人检测方案指南

    sudo apt-get install libopencv-dev python3-opencv 2.在全志T527开发板​安装pipsudo apt-get install python3-pip 二
    发表于 04-11 18:14

    创建了用于OpenVINO™推理的自定义C++和Python代码,从C++代码中获得的结果与Python代码不同是为什么?

    创建了用于OpenVINO™推理的自定义 C++ 和 Python* 代码。 在两个推理过程中使用相同的图像和模型。 从 C++ 代码中获得的结果与 Python*
    发表于 03-06 06:22

    使用Python实现xgboost教程

    装: bash复制代码conda install -c conda-forge xgboost 2. 导入必要的库 在你的Python脚本或Jupyter Notebook中,导入必要的库: python复制
    的头像 发表于 01-19 11:21 2214次阅读

    使用Python+OpenCV处理图片

    如果给你一张图片作为背景,另外一张图片中的物体作为前景图,要把前景图中的物体叠加布置到背景图的中间位置,并且前景图中的物体需要在背景图中有旋转和投影,怎么处理?
    的头像 发表于 12-23 15:54 1201次阅读

    用MSP430控制DAC8531,DAC8531输出的电压只有十几毫伏,问题出在哪?

    0x7fff,从图形看单片机输出没问题,但是DAC8531输出的电压只有十几毫伏,问题出在哪? 我的硬件部分是引脚1和2连接到输入电源5V,3和4连接输出。
    发表于 12-11 07:52

    【AI实战项目】基于OpenCV的“颜色识别项目”完整操作过程

    适用于哪些场景,然后通过Python编写代码来实现这些算法,并应用于实际项目中,实现图像的检测、识别、分类、定位、测量等目标。华清远见【python+OpenCV
    的头像 发表于 12-09 16:42 1894次阅读
    【AI实战项目】基于<b class='flag-5'>OpenCV</b>的“颜色识别项目”完整操作过程