Python+OpenCV图像风格迁移的实现方法讲解
本篇文章给大家带来的内容是关于Python+OpenCV图像风格迁移的实现方法讲解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
现在很多人都喜欢拍照(自拍)。有限的滤镜和装饰玩多了也会腻,所以就有 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 论文中的网络模型实现。所以,即使作为人工智能的菜鸟,也可以拿别人训练好的模型来玩一玩,体会下神经网络的奇妙。
(相关代码和模型的获取见文末)
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):
原始图像
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 大量使用了 图像二值化、边缘检测 等操作,让我想到以前数字图像处理课的大作业……现在图像风格迁移的效率达到了实时,想必以后也会经常被使用吧。
以上是Python+OpenCV图像风格迁移的实现方法讲解的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

在 Sublime Text 中运行 Python 代码,需先安装 Python 插件,再创建 .py 文件并编写代码,最后按 Ctrl B 运行代码,输出会在控制台中显示。

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

Golang在性能和可扩展性方面优于Python。1)Golang的编译型特性和高效并发模型使其在高并发场景下表现出色。2)Python作为解释型语言,执行速度较慢,但通过工具如Cython可优化性能。

在 Visual Studio Code(VSCode)中编写代码简单易行,只需安装 VSCode、创建项目、选择语言、创建文件、编写代码、保存并运行即可。VSCode 的优点包括跨平台、免费开源、强大功能、扩展丰富,以及轻量快速。

在 Notepad 中运行 Python 代码需要安装 Python 可执行文件和 NppExec 插件。安装 Python 并为其添加 PATH 后,在 NppExec 插件中配置命令为“python”、参数为“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通过快捷键“F6”运行 Python 代码。
