机器学习: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,一经查实,立即删除!

相关文章

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

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

EKS API查询慢排查

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

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

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

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

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

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

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

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

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

Apache Seata快速入门

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

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

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

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请求,察看结果树 1. 测试计划 --> 添加 --> 线程(用户) --> 线程组 2. 线程组配置 默认配置 线程数:虚拟用户数,一个虚拟用户占用一个进程或线程。 Ramp-Up 时间(秒):全部线程执行完…

使用Jenkins部署项目

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

Kettle基本使用

目录 一、安装Kelttle 1-1 安装java环境 1-2 Kettle安装 二、Kettle的基本使用 2-1 将txt文本数据转为excel数据 创建txt文件 创建kettle的转换任务 定义转换流程 配置输入文件 连接读取和写入任务 配置excel输出 保存转换任务 执行转换任务 2-2 将txt文件输出到M…

数据库管理-第252期 深入浅出多主多活数据库技术- Cantian存储引擎(二)(20241017)

数据库管理252期 2024-10-17 数据库管理-第252期 深入浅出多主多活数据库技术- Cantian存储引擎(二)(20241017)1 部署规划2 服务器基础配置2.1 配置HOSTS2.2 关闭防火墙2.3 关闭SELinux2.4 配置yum源 3 编译服务器配置3.1 安装git…

「Python精品教程」Python快速入门,基础数据结构:数字

​***奕澄羽邦精品教程系列*** 编程环境: 1、Python 3.12.5 2、Visual Studio Code 1.92.1 在现实世界中,我们经常要面对各式各样的数字,通过简单或者复杂的数学运算,来帮助我们计算出想要的结果。程序开发过程中,数字…

自动化测试工具在API测试中的优势是什么?

在设计API接口时,确保数据获取的效率和准确性是至关重要的。以下是一些最佳实践和代码示例,帮助你提高API的数据获取效率和准确性。 1. 使用高效的数据访问模式 选择合适的数据库访问模式对于提高数据获取效率至关重要。例如,使用索引可以显…

【启明智显分享】ZX7981PM WIFI6 5G-CPE:2.5G WAN口,2.4G/5G双频段自动调速

昨天,我们向大家展现了ZX7981PG WIFI6 5G-CPE,它强大的性能也引起了一波关注,与此同时,我们了解到部分用户对更高容量与更高速网口的需求。没关系!启明智显早就预料到了!ZX7981PM满足你的需求! …

Vue3 集成Monaco Editor编辑器

Vue3 集成Monaco Editor编辑器 1. 安装依赖2. 使用3. 效果 Monaco Editor (官方链接 https://microsoft.github.io/monaco-editor/)是一个由微软开发的功能强大的在线代码编辑器,被广泛应用于各种 Web 开发场景中。以下是对 Monaco Editor 的…

HTML5教程(三)- 常用标签

1 文本标签-h 标题标签&#xff08;head&#xff09;&#xff1a; 自带加粗效果&#xff0c;从h1到h6字体大小逐级递减一个标题独占一行 语法 <h1>一级标题</h1><h2>二级标题</h2><h3>三级标题</h3><h4>四级标题</h4><h5…

关于md5强比较和弱比较绕过的实验

在ctf比赛题中我们的md5强弱比较的绕过题型很多&#xff0c;大部分都是结合了PHP来进行一个考核。这一篇文章我将讲解一下最基础的绕过知识。 MD5弱比较 比较的步骤 在进行弱比较时&#xff0c;PHP会按照以下步骤执行&#xff1a; 确定数据类型&#xff1a;检查参与比较的两…

jmeter响应断言放进csv文件遇到的问题

用Jmeter的json 断言去测试http请求响应结果&#xff0c;发现遇到中文时出现乱码&#xff0c;导致无法正常进行响应断言&#xff0c;很影响工作。于是&#xff0c;察看了其他测试人员的解决方案&#xff0c;发现是jmeter本身对编码格式的设置导致了这一问题。解决方案是在jmete…