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

这种功能叫做“图像风格迁移”,几乎都是基于 CVPR 2015 的论文《A Neural Algorithm of Artistic Style》和 ECCV 2016 的论文《Perceptual Losses for Real-Time Style Transfer and Super-Resolution》中提出的算法,以及后续相关研究的基础上开发出来的。

通俗来讲,就是借助于神经网络,预先将名画中的风格训练成出模型,在将其应用在不同的照片上,生成新的风格化图像。

来自《A Neural Algorithm of Artistic Style》

而因为神经网络在计算机视觉方面的应用越来越广,著名的视觉开发库 OpenCV 在 3.3 版本中正式引入 DNN(深度神经网络),支持 Caffe、TensorFlow、Torch/PyTorch 等主流框架的模型,可用以实现图像的识别、检测、分类、分割、着色等功能。

我最近才发现在 OpenCV 的 Sample 代码中就有图像风格迁移的 Python 示例(原谅我的后知后觉),是基于 ECCV 2016 论文中的网络模型实现。所以,即使作为人工智能的菜鸟,也可以拿别人训练好的模型来玩一玩,体会下神经网络的奇妙。

(相关代码和模型的获取见文末)

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

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):

原始图像

ECCV16 models

instance_norm models

核心代码其实很短,就是 加载模型 -> 读取图片 -> 进行计算 -> 输出图片,我在官方示例基础上进一步简化了一下:

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)

执行结果:

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

PS:前两天看赵雷演唱会的时候我还说:他演唱会的背景 MV 大量使用了 图像二值化、边缘检测 等操作,让我想到以前数字图像处理课的大作业……现在图像风格迁移的效率达到了实时,想必以后也会经常被使用吧

获取文中相关代码和模型下载地址,请在公众号(Crossin的编程教室)对话中回复关键字 名画

════

其他文章及回答:

欢迎微信搜索及关注:Crossin的编程教室

java图像风格迁移_Python+OpenCV 图像风格迁移(模仿名画)相关推荐

  1. python皮同_Python OpenCV 图像的双线性插值算法,全网最细致的算法说明_橡皮擦,一个逗趣的互联网高级网虫-CSDN博客...

    原文作者:梦想橡皮擦 原文标题:Python OpenCV 图像的双线性插值算法,全网最细致的算法说明 发布时间:2021-02-17 20:55:32 Python OpenCV 365 天学习计划 ...

  2. python 读取图片成为一维数组_python+opencv 图像的数组和矩阵操作

    在调用opencv的imread函数读取图像时,我们得到的其实是一个类型为numpy.ndarray的n维数组.这个数组的维度是[height,width,3],它是由每个像素的RGB通道的灰度值组成 ...

  3. python打出由边框包围的_python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)...

    图像边框的实现 图像边框设计的主要函数 cv.copyMakeBorder()--实现边框填充 主要参数如下: 参数一:源图像--如:读取的img 参数二--参数五分别是:上下左右边的宽度--单位:像 ...

  4. pythonopencv图像形态_python+opencv图像形态学处理详细解释(膨胀、腐蚀、开闭运算、礼帽和黑猫)...

    python+opencv图像形态学处理 本篇博客主要是关于形态学中的腐蚀.膨胀.开运算.闭运算.礼帽和黑帽的函数用法. 内容会比较,为方便查阅.代码的解释会写在代码中. 用于测试的图像原图: 一.腐 ...

  5. python图像融合算法_Python OpenCV 实现图像融合

    原标题:Python OpenCV 实现图像融合 来自:https://www.linuxmi.com/python-opencv-image-blending.html 在本文中,我们将讨论Pyth ...

  6. 利用python对图像进行傅里叶变换_python实现图像傅里叶变换

    创作不易,如果对您有所帮助,请帮忙点赞,感谢! 一. 傅里叶变换简介: 在数字图像处理中,有两个经典的变换被广泛使用--傅里叶变换和霍夫变换.傅里叶变换是将时间域上的信号转变为频率域上的信号,进而进行 ...

  7. python实现浮雕效果的原理_python+opencv+图像特效(图像灰度处理、颜色翻转、图片融合,边缘检测,浮雕效果,颜色映射)...

    原图 图像灰度处理 #方式1 import cv2 #读取彩色原图 img0=cv2.imread('E:/python_cv/01.jpg',1) #读取灰度图 img1=cv2.imread('E ...

  8. python opencv图片旋转180度_Python opencv图像镜像翻转

    最近在训练CNN网络,需要对数据进行扩充,于是想做一下图像的镜像翻转,主要参考了博客: 不过我发现博主使用的是opencv老版本了,现在大家都是cv2了,因此我对博主的代码进行了必要的修改. 首先,说 ...

  9. python亲密度_Python OpenCV 图像2D直方图,取经之旅第 25 天

    Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧. 基础知识铺垫 在之前的博客中,我们获取图像直方图的方式都是获取一维直方图,简单说就是只获取一个通道的特征,例如灰度,B 通 ...

最新文章

  1. 哲学是什么?(选自:苏菲的世界)
  2. Hadoop参数汇总
  3. linux 基础知识点杂项记
  4. python_redis模块
  5. Linux下rpm包x86、i386、i486、i586、i686和x86_64 后缀含义
  6. python中英文半角还是全角_Python3全角转半角的方法
  7. JDK8和JDK1.8有何区别
  8. java 存储png文件_vue图片上传及java存储图片(亲测可用)
  9. JavaScript -- this 总结
  10. 获取周一_周一个股精选:光伏概念、央企改革:太阳能(000591)
  11. webstorm的下载以及React环境搭建
  12. Elastic Stack之Elasticsearch 5.6.12 集群部署实战
  13. matlab边角网间接平差计算,第21讲间接平差实例.ppt
  14. labview温度采集系统,温度计正负范围内显示,附加温度预警操作部分(初学者~)
  15. 实现微信小程序的分享转发功能(可以从分享页返回小程序首页)
  16. c语言统计大小写字母 空格 和数字个数,C++统计中英文大小写字母、数字、空格及其他字符个数的方法...
  17. 【第3版emWin教程】第57章 emWin6.x的炫酷时钟表盘设计,结合硬件RTC
  18. 捉奸游戏之后,中年危机游戏也来了。。
  19. HTMl--基础样式的使用
  20. 如何查看存储过程内容

热门文章

  1. Windows环境下解压.tar.gz压缩文件
  2. 盘点开复时代Google中国的变化
  3. 微信小程序(应用号)开发新闻客户端的实战课程
  4. 22下教师资格证面试备考攻略
  5. 虚幻引擎之多线程渲染机制
  6. [置顶] 游戏开发技术总结(经典之作)第八集 脚踏实地-----游戏角色自动寻路、路径搜索算法...
  7. 如何使用Gatsby创建自己的博客
  8. windows7 中文乱码解决方法
  9. VC-dimension
  10. [转载]t检验、t分布、t值