【一秒梵高】基于OpenCV4实现图像九种风格迁移

news2024/11/16 10:24:59

风格迁移

图像风格迁移、色彩填充与色彩变换等,严格意义上来说都属于计算机视觉任务中图像处理的分支。它们输入的是图像,输出的也是图像,过程实现图像到图像的内容与风格的转换,深度学习在这类图像处理任务上也取得了良好的效果。OpenCV4在DNN模块中支持常见风格迁移的图像转换模型,该模型是李飞飞等人发表的感知损失实时分割迁移与超分辨率论文的torch版本实现,模型的下载地址为:

https://github.com/jcjohnson/fast-neural-style

模型介绍

模型支持任意尺寸的图像输入,输出NCHW的四维数据,其中N=1,C=3表示彩色图像,H跟W分别表示图像的高与宽。作者提供了很多种预训练的风格迁移模型以供读者使用,这里下载了下面九种风格转换的预训练模型:

composition_vii.t7
starry_night.t7
la_muse.t7
the_wave.t7
mosaic.t7
the_scream.t7
feathers.t7
candy.t7
udnie.t7

在这里插入图片描述
这些模型都是torch框架支持的二进制权重文件,加载模型之后,就可以调用forward得到结果,通过对输出结果反向加上均值,rescale到0~255的RGB色彩空间,即可得到转换后的风格图像,如图12-8所示,是九种变换风格的效果演示。
在这里插入图片描述
OpenCV4 C++ 风格迁移演示的相关代码如下:

int main(int argc, char** argv) {
	int index = 0;
	VideoCapture capture = VideoCapture(0);
	Net net = readNetFromTorch(format("%s%s", base_dir.c_str(), styles[index].c_str()));
	net.setPreferableBackend(DNN_BACKEND_INFERENCE_ENGINE);
	net.setPreferableTarget(DNN_TARGET_CPU);
	Mat frame;
	while (true) {
		capture.read(frame);
		imshow("input", frame);
		Mat blobImage = blobFromImage(frame, 1.0,
			Size(width, height),
			Scalar(103.939, 116.779, 123.68), false, false);

		net.setInput(blobImage);
		Mat out = net.forward();
		vector<double> layersTimings;
		double freq = getTickFrequency() / 1000;
		double time = net.getPerfProfile(layersTimings) / freq;
		printf("execute time : %.2f ms\n", time);
		int ch = out.size[1];
		int h = out.size[2];
		int w = out.size[3];
		Mat result = Mat::zeros(Size(w, h), CV_32FC3);
		float* data = out.ptr<float>();

		// decode 4-d Mat object
		for (int c = 0; c < ch; c++) {
			for (int row = 0; row < h; row++) {
				for (int col = 0; col < w; col++) {
					result.at<Vec3f>(row, col)[c] = *data++;
				}
			}
		}

		// 整合结果输出
		printf("channels : %d, height: %d, width: %d \n", ch, h, w);
		add(result, Scalar(103.939, 116.779, 123.68), result);
		result /= 255.0;

		// 中值滤波
		medianBlur(result, result, 5);
		Mat dst;
		resize(result, dst, frame.size());
		imshow("styled-video", dst);

		// ESC means exit
		char c = waitKey(1);
		if (c == 27) {
			break;
		}
	}

	waitKey(0);
	return 0;
}

以上演示来自《OpenCV应用开发:入门、进阶与工程化实践》一书第十二章 第五小节内容。学习OpenCV深度神经网络模型推理技能,相关代码解释与说明查看本书即可获取,

七折优惠专属《OpenCV应用开发:入门、进阶与工程化实践》

关于本书

《OpenCV应用开发:入门、进阶与工程化实践》全书共计16个章节,重点聚焦OpenCV开发常用模块详解与工程化开发实践,提升OpenCV应用开发能力,助力读者成为OpenCV开发者,同时包含深度学习模型训练与部署加速等知识,帮助OpenCV开发者进一步拓展技能地图,满足工业项目落地所需技能提升。请点下面查看本书目录

七折优惠专属《OpenCV应用开发:入门、进阶与工程化实践》

学习课程有专属答疑群
读者专属QQ群 :657875553
进群暗号:OpenCV4读者

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

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

相关文章

改进了编排控制并增强了推理的可视性,Agents for Amazon Bedrock 现已上市

七月份的时候&#xff0c;我们推出了 Agents for Amazon Bedrock 预览版。如今&#xff0c;Agents for Amazon Bedrock 全面上市。 Agents for Amazon Bedrock 通过编排多步任务&#xff0c;有助于您加速生成人工智能 &#xff08;AI&#xff09; 应用程序的开发。代理使用基础…

【ARM Coresight 系列 2 文章 -- Trace32 对 APBIC 地址的配置 介绍】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 APBIC RomtableTrace32 RESBREAKTrace32 ENRESETAPBIC Romtable 图 1 APBIC 网络图 如上图所示,如果想通过Trace32/DS-5 去访问 AP, 这个时候需要怎么做呢?可以看到 APBIC 中ROMTABLE 中 APB-AP 的偏移是0x002000…

2023 re:Invent|Amazon Q与Amazon CodeWhisperer面向企业开发者提效利器

本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 2023年&#xff0c;以GPT为代表的生成式AI引爆了新一轮技术热潮&#xff0c;短短一年的时…

Jenkins离线安装部署教程简记

前言 在上一篇文章基于Gitee实现Jenkins自动化部署SpringBoot项目中&#xff0c;我们了解了如何完成基于Jenkins实现自动化部署。 对于某些公司服务器来说&#xff0c;是不可以连接外网的&#xff0c;所以笔者专门整理了一篇文章总结一下&#xff0c;如何基于内网直接部署Jen…

【数据结构】栈和队列超详解!(Stack Queue)

文章目录 前言一、栈1、栈的基本概念2、栈的实现&#xff08;数组实现&#xff09;3、栈的基本操作3.1 栈的结构设计3.2 栈常见的基本函数接口 4、栈的实现4.1 初始化栈4.2 栈的销毁4.3 入栈4.4 出栈4.5 判空4.6 长度4.7 获取栈顶元素 完整代码Stack.hStack.cTest.c 二、队列1、…

排序-归并排序与计数排序

文章目录 一、归并排序1、概念2、过程3、代码实现4、复杂度5、稳定性 二、 计数排序1、思路2、代码实现3、复杂度&#xff1a;4、稳定性 一、归并排序 1、概念 是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已…

车载导航系统UI界面,可视化大屏设计(PS源文件)

大屏组件可以让UI设计师的工作更加便捷&#xff0c;使其更高效快速的完成设计任务。现分享车载导航系统科技风蓝黑简约UI界面、车载系统UI主界面、车载系统科技风UI界面、首页车载系统科技感界面界面的大屏Photoshop源文件&#xff0c;开箱即用&#xff01; 若需 更多行业 相关…

数据库动态视图和存储过程报表数据管理功能设计

需求&#xff1a;需要将ERP的报表数据挪到OA中&#xff0c;但是OA表单设计不支持存储过程动态传参&#xff0c;所以需要设计一个系统&#xff0c;可以手动配置&#xff0c;动态显示原本ERP的报表数据&#xff0c;ERP报表是存在数据库的视图和存储过程中 思路&#xff1a;因为E…

算法复习——6种排序方法的简单回顾

算法复习——6种排序方法的简单回顾 常见排序方法&#xff1a;冒泡排序、选择排序、插入排序、堆排序、归并排序、快速排序的简单回顾 冒泡排序 重复“从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字的位置” 在冒泡排序中&#xff0c;第 1 轮需要比较 n - 1…

整理b站黑马程序员C++课程中对于计算机视觉学习有所帮助的知识点。(重点用*标出)

文章目录 1、注释2、变量3、常量4、标识符5、整型 浮点型 字符型 字符串 布尔6、输入 输出7、逻辑运算法8、 程序流程结构9、三目运算符10、switch语句11、循环语句12、跳转语句13、*数组13.1一维数组名 14、二维数组15、**函数15.1、函数的调用15.2、函数的声明15.3、函数份文…

Android camera的metadata

一、实现 先看一下metadata内部是什么样子&#xff1a; 可以看出&#xff0c;metadata 内部是一块连续的内存空间。 其内存分布大致可概括为&#xff1a; 区域一 &#xff1a;存 camera_metadata_t 结构体定义&#xff0c;占用内存 96 Byte 区域二 &#xff1a;保留区&#x…

HarmonyOS--基础组件TextInput

TextInput 官方文档 TextInput组件https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-textinput-0000001427584864-V3#ZH-CN_TOPIC_0000001523968610__%E5%AD%90%E7%BB%84%E4%BB%B6 文本输入框组件 接口 TextInput(value?:…

【Python】用Python发邮件

准备工作 以新浪邮箱为例&#xff0c;进入账号管理&#xff0c;打开授权码并保存下来 用到的包 import smtplib from email.header import Header from email.mime.text import MIMEText 账号授权码准备 这里用的是前面记录的授权码&#xff0c;不是登录密码哦 email_hostsm…

40G AOC线缆全系列产品知识详解

40G AOC&#xff08;Active Optical Cable&#xff09;线缆作为高速数据传输的重要组成部分&#xff0c;在现代通信和数据中心应用中扮演着重要角色。本期文章我们将从其基本原理、应用领域、优势特点等方面对ETU-LINK 40G AOC全系列产品进行解析。 一、40G AOC全系列产品解析…

Facebook广告投放常见错误

在进行Facebook广告投放时&#xff0c;很容易犯一些常见的错误。这些错误可能导致广告投资的浪费&#xff0c;影响广告效果并降低回报。本文小编讲一些常见的Facebook广告投放错误&#xff0c;以及如何避免它们。 1、不明确目标受众 广告的成功与否很大程度上取决于你选择的目…

基于Java+Swing+mysql学生选课成绩信息管理系统

基于JavaSwingmysql学生选课成绩信息管理系统 一、系统介绍二、功能展示三、项目相关3.1 乱码问题3.2 如何将GBK编码系统修改为UTF-8编码的系统&#xff1f; 四、其它1.其他系统实现 五、源码下载 一、系统介绍 学生教师信息管理、年级班级信息管理、课程信息管理、选课、成绩…

怎么制作一个微信小程序商城

随着移动互联网的普及&#xff0c;越来越多的商家开始关注线上销售。微信小程序商城作为一种便捷、实用的线上销售平台&#xff0c;受到了广大商家的青睐。本文将详细介绍如何制作一个微信小程序商城。 一、登录乔拓云平台进入后台 首先&#xff0c;我们需要登录乔拓云平台&am…

亚信科技AntDB数据库——深入了解AntDB-M元数据锁的相关概念

AntDB-M在架构上分为两层&#xff0c;服务层和存储引擎层。元数据的并发管理集中在服务层&#xff0c;数据的存储访问在存储引擎层。为了保证DDL操作与DML操作之间的一致性&#xff0c;引入了元数据锁&#xff08;MDL&#xff09;。 AntDB-M提供了丰富的元数据锁功能&#xff…

服务器感染了.DevicData-D-XXXXXXXX勒索病毒,如何确保数据文件完整恢复?

引言&#xff1a; 勒索病毒成为网络安全的严峻挑战&#xff0c;而最新的.DevicData-D-XXXXXXXX勒索病毒更是引起广泛关注。本文将深入介绍.DevicData-D-XXXXXXXX勒索病毒的特征&#xff0c;提供恢复被其加密的数据文件的方法&#xff0c;并分享预防措施&#xff0c;以确保您的数…

【算法题】打印任务排序(js)

输入: 1,2,2 输出&#xff1a;2,0,1 说明:队列头部任务的优先级为1&#xff0c;被移到队列尾部&#xff1b;接着顺序打印两个优先级为2的任务&#xff0c;故其序号分别为0和1&#xff1b;最后打印剩下的优先级为1的任务&#xff0c;其序号为2 解法&#xff1a; const str &q…