机器学习:opencv--风格迁移

目录

前言

一、代码及步骤解释

1.图片与处理

2.加载模型

3.输出图像


前言

        风格迁移(Style Transfer)是一种计算机视觉技术,旨在将一种图像的艺术风格应用到另一种图像上,同时保持其内容。

 

一、代码及步骤解释

1.图片与处理

  • 传入图片,使用opencv里的dnn神经网络模型对图片进行处理,改变图片的维度
  • 图片张数,通道数,高,宽
import cv2"""图片风格迁移"""
img = cv2.imread('huanghelou1.JPG')
img = cv2.resize(img, (500, 500))
cv2.imshow('img', img)
cv2.waitKey(0)# 图片预处理
(h, w) = img.shape[:2]
blob = cv2.dnn.blobFromImage(img, 1, (w, h), (0, 0, 0), swapRB=True)  # 改变图像格式 B C H W
# blob = cv2.dnn.blobFromImage(image, scalefactor=None, size=None, mean=None, swapRB=None, crop=None)
# 参数:
#       image:表示输入图像。
#       scalefactor:表示对图像内的数据进行缩放的比例因子。具体运算是每个像素值*scalefactor,该值默认为 1。
#       size:用于控制blob的宽度、高度。
#       mean:表示从每个通道减去的均值。 (0,0,0):表示不进行均值减法。即不对图像的B、G、R通道进行任何减法操作。
#               若输入图像本身是B、G、R通道顺序的,并且下一个参数swapRB值为True,
#               则mean值对应的通道顺序为R、G、B。:opencv BGR RGB
#       swapRB:表示在必要时交换通道的R通道和B通道。一般情况下使用的是RGB通道。而openCV通常采用的是BGR通道
#               因此可以根据需要交换第1个和第3个通道。该值默认为 False。
#       crop:布尔值,如果为True:则在调整大小后进行居中裁剪
# 返回值:blob: 表示在经过缩放、裁剪、减均值后得到的符合人工神经网络输入的数据。该数据是一个四维数据,
#           布局通常使用N(表示batch size)、C(图像通道数,如RGB图像具有三个通道)、H(图像高度)、W(图像宽度)表示

 

2.加载模型

风格迁移模型

  1. 使用.readNet()读取风格迁移的模型
  2. 将上一步处理之后的图片传入模型
  3. 向前传播得到处理之后的数据
# 加载模型
net = cv2.dnn.readNet(r'model/la_muse.t7')  # readNet 通用读取模型 不论后缀
net.setInput(blob)  # 将图片传入模型
out = net.forward()  # 向前传播

 

3.输出图像

  1. 上一步骤输出的数据还是四维的,
  2. 使用.reshape()进行转换
  3. 因为输出的数据里有负值,所以使用归一化处理
  4. 然后将其进行转置 变成 (高 宽 通道数)的形式  让opencv能够输出
# 重塑形状(忽略第1维),4维变3维
# 调整输出out的形状,模型推理输出out是四维BCHW形式的,调整为三维CHW形式
out_new = out.reshape(out.shape[1], out.shape[2], out.shape[3])
# 对输入的数组(或图像)进行归一化处理,使其数值范围在指定的范国内
cv2.normalize(out_new, out_new, norm_type=cv2.NORM_MINMAX)  # 输入数组 输出数组  归一化类型
# 转置输出结果的维度
# result = out_new
result = out_new.transpose(1, 2, 0)  # 将图像转置成 高 宽 通道数 符合opencv的格式
# 显示转换后的图像
cv2.imshow('stylized Image', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/55600.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

滚雪球学Redis[7.1讲]:Redis实战案例

全文目录: 🎉前言🚦1. 使用Redis实现会话管理在Web应用中使用Redis管理会话会话过期与刷新策略安全性考虑与优化 🧩2. 使用Redis实现缓存系统缓存的基本原理Redis缓存的应用场景缓存失效策略与雪崩预防 ✨3. Redis在排行榜系统中的…

VBA技术资料MF210:按顺序号复制工作表中的图片

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…

EKS API查询慢排查

EKS API查询异常慢,一次查询得4~5s,命令补全也是需要API查询的,导致执行一次查询命令可能比平常花费10倍时间 现象 1、命令输入后返回慢 2、get edit delete所有操作都慢 排查 1、同样需要查询API的kuboard在执行各项操作时无延迟 2、升级…

DirectShow过滤器开发-音频渲染过滤器

下载本过滤器 本过滤器播放PCM和FLOAT音频流。 过滤器信息 过滤器名称:音频渲染 过滤器GUID:{4A910FA8-08DC-4832-85B2-4B7A3FF87F88} DLL注册函数名:DllRegisterServer 删除注册函数名:DllUnregisterServer 过滤器有1个输入引脚…

使用 MongoDB 构建 AI:利用实时客户数据优化产品生命周期

在《使用 MongoDB 构建 AI》系列博文中,我们看到越来越多的企业正在利用 AI 技术优化产品研发和用户支持流程。例如,我们介绍了以下案例: Ventecon 的 AI 助手帮助产品经理生成和优化新产品规范 Cognigy 的对话式 AI 帮助企业使用任意语言&a…

OpenCV-光流估计

文章目录 一、光流估计介绍1.光流估计的基本概念2.光流估计的原理3.光流估计的前提4.OpenCV中的光流估计算法5.参数设置与调整 二、代码实现三、注意事项 OpenCV中的光流估计是计算机视觉领域中的一项重要技术,它通过分析图像序列中像素点的运动,来估计物…

约克VRF打造舒适绿色无污染的生活环境

在生活的各个方面,约克VRF都采取了多种措施助力碳中和。 采用国际领先的空气源热泵技术,只需少量电力就可将空气中的能量转化为室内热量,被称为“大自然的搬运工”!COP能效值最高可达4.24(每用一度电产生4.24度电热量&…

Elasticsearch字段数据类型

1. 前言 ES文档的每个字段都至少有一个数据类型,此类型决定了字段值如何被存储以及检索。例如,字符串类型可以定义为text或者keyword,前者用于全文检索,会经过分词后索引;后者用于精准匹配,值会保持原样被…

接口测试-接口支持幂等

接口支持幂等是什么意思? 接口支持幂等(Idempotency of Interface)意味着,对于同一请求,无论其被发送多少次,接口都应该返回相同的结果,并且不会对系统状态产生不同的影响(即无副作…

使用verilog设计实现的数字滤波器(低通、高通、带通)及其仿真

以下是一个简单的使用Verilog设计数字滤波器(以有限脉冲响应(FIR)滤波器为例,实现低通、高通、带通滤波器)的基本步骤和代码框架: 一、FIR滤波器原理 FIR滤波器的输出 y [ n ] y[n] y[n] 是输入信号

道观小程序系统架构设计与实现开发案例分析

道观小程序是一款专为道教信仰者和文化爱好者设计的移动应用,旨在提供一站式服务体验。它融合了道教文化传播、道观信息查询、在线供奉祈福以及信众互动交流等多重功能,让用户能够轻松获取道观的最新资讯,参与宗教活动,享受便捷的…

Mybatis--简略3

本文主要内容&#xff1a;mybatis多表关联处理&#xff0c;嵌套查询&#xff0c;注解标签&#xff0c;动态sql. 多表关联 先附上示例代码&#xff0c;后面解释 <resultMap id"searchStudent" type"Student"><result column"id" prop…

线性系统性能分析方法3——频率特性分析法(频域分析法)

一种图解的分析方法&#xff0c;不必直接求解系统输出的时域表达式&#xff0c;不需要求解系统的闭环特征根&#xff0c;具有较多的优点。如&#xff1a; ①根据系统的开环频率特性揭示闭环系统的动态性能和稳态性能&#xff0c;得到定性和定量的结论&#xff0c;可以简单迅速…

Qt界面开发(对象树概念、信号与槽机制)

&#x1f333;对象树 在Qt框架中&#xff0c;对象树&#xff08;Object Tree&#xff09;是针对QObject类以及其子类的结构化组织方式/每一个QObject实例都可以有一个父对象和多个子对象&#xff0c;形成一种层次化的树状关系。这种设计在Qt中具有多个用途和优势。 概念&…

Apache Seata快速入门

前置推荐阅读&#xff1a;Apache Seata 简介-CSDN博客 快速开始 让我们从一个微服务示例开始。 用例​ 用户购买商品的业务逻辑。整个业务逻辑由 3 个微服务提供支持&#xff1a; 仓储服务&#xff1a;对给定的商品扣除仓储数量。订单服务&#xff1a;根据采购需求创建订单…

【Linux】解答:为什么创建目录文件,硬链接数是2;创建普通文件时,硬链接数是1?(超详细图文)

前言 大家好吖&#xff0c;欢迎来到 YY 滴Linux系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Lin…

React 中级阶段学习计划

React 中级阶段学习计划 目标 掌握状态管理和路由。能够调用API并处理异步数据。学会使用CSS-in-JS和CSS Modules进行样式处理。 学习内容 状态管理 React Context API Context API&#xff1a;用于在组件树中传递数据&#xff0c;避免多层props传递。示例&#xff1a;im…

gitlab配置ssh密钥

1.配置用户信息 git config --global user.name "你的名字" git config --global user.email "你的邮箱" 查看配置是否成功 git config --global --list 2.生成密钥 终端 或 右键文件夹open git bash here 输入命令 ssh-keygen -t rsa -C 随意(生…

接口测试(二)jmeter——实现http请求、察看结果树、请求默认值

一、实现http请求&#xff0c;察看结果树 1. 测试计划 --> 添加 --> 线程(用户) --> 线程组 2. 线程组配置 默认配置 线程数&#xff1a;虚拟用户数&#xff0c;一个虚拟用户占用一个进程或线程。 Ramp-Up 时间&#xff08;秒&#xff09;&#xff1a;全部线程执行完…

使用Jenkins部署项目

部署中的痛点 为什么要用Jenkins&#xff1f;我说下我以前开发的痛点&#xff0c;在一些中小型企业&#xff0c;每次开发一个项目完成后&#xff0c;需要打包部署&#xff0c;可能没有专门的运维人员&#xff0c;只能开发人员去把项目打成一个exe包&#xff0c;可能这个项目已…