在OpenCV基于深度学习的超分辨率模型实践

news2025/1/20 1:46:43

1. 引言

OpenCV是一个开源的计算机视觉库,拥有大量优秀的算法。基于最新的合并,OpenCV包含一个易于使用的接口,主要用于实现基于深度学习方法的超分辨率(SR)。该接口包含预先训练的模型,这些模型可以非常容易和有效地用于推理。在这篇文章中,我将解释它可以做什么,并逐步展示如何使用它。

闲话少说,我们直接开始吧!

2. 版本说明

首先我们的第一步是安装OpenCV库。一些功能都是在逐渐发布,所以需要注意版本:4.2.0用于C++,4.3.0添加Python接口,4.4.0添加GPU推理。大家可以按照OpenCV文档中的说明进行相应的操作。大家注意安装contrib模块,因为这是SR接口代码所在的位置。本文中我们将使用的接口或模块称为dnn_superres(dnn代表深度神经网络;superres代表超分辨率)。

3. 模型下载

接着我们需要单独下载预先训练好的模型,因为OpenCV代码库不包含它们。原因是有些模型相当大。这里有几种模型可供选择,所有这些模型都是流行SR论文中的实现。现在,让我们选择一个小模型,大家可以在这里下载。

4. 实践

我们在Python中可以通过以下代码进行相应的实现:


import cv2
from cv2 import dnn_superres

# Create an SR object
sr = dnn_superres.DnnSuperResImpl_create()

# Read image
image = cv2.imread('./input.png')

# Read the desired model
path = "EDSR_x3.pb"
sr.readModel(path)

# Set the desired model and scale to get correct pre- and post-processing
sr.setModel("edsr", 3)

# Upscale the image
result = sr.upsample(image)

# Save the image
cv2.imwrite("./upscaled.png", result)

代码相对简单,参考相应的注释即可。

5. 推荐模型

目前在OpenCV中主要支持4种不同的SR模型。它们都可以按2、3和4的比例放大图像。LapSRN甚至可以升级8倍。它们在准确性、大小和速度上各不相同。

  • EDSR: 这是目前表现最好的模型。然而,它也是参数量最大的模型,因此具有最大的文件大小和最慢的推理。大家可以在这里下载。

  • ESPCN: 这是一个相对较小的模型,具有快速和良好的推理能力。它可以进行实时视频放大(取决于图像大小)。大家可以在这里下载。

  • FSRCNN: 这也是一个具有快速准确推理的小模型。还可以进行实时视频放大。大家可以在这里下载。

  • LapSRN: 这是一款中等大小的模型,可以提升8倍分辨率。大家可以在这里下载。

有关这些模型的更多信息和实现,请参阅模块的GitHub中的ReadME文件。关于上述模型的基准和比较,请访问此处。

6. 具体实例

接着让我们看具体实例如下:(如果在移动设备上查看,建议放大后进行直观的对比)

输入图像如下:
在这里插入图片描述
双线性插值放大三倍后的图像如下:
在这里插入图片描述
使用模型FSRCNN放大三倍后的效果如下:
在这里插入图片描述
使用模型ESDR放大三倍后的效果如下:
在这里插入图片描述
正如大家所看到的,这些模型产生了令人非常满意的结果,特别是EDSR给出了惊人的结果,尽管它有点慢(几秒钟的推理时间),但是绝对值得等待。大家可以自己试试!

7. 注意事项

事实上,在上述具体实现中,有以下几点注意事项:

  • 如果在使用.jpg图像时出现错误,请尝试切换到.png格式

  • 确保大家的setModel()中的参数与大家在readModel()中使用的模型匹配。

  • 尝试不同的模型,在速度和性能方面获得不同的结果。

  • 如果大家想使用GPU进行推理(默认是CPU),大家可以在读入模型后将后端设置为CUDA。这是一个新的特性,因此大家需要4.4.0版本。请参阅相关的拉取请求。部门代码参考如下:

path = "EDSR_x3.pb"
sr.readModel(path)

# Set CUDA backend and target to enable GPU inference
sr.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)
sr.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)

8. 总结

本文重点介绍了在OpenCV中,利用深度学习的方法来进行超分辨率的实现,被给出了具体的代码实例,和几种常用的模型。

您学废了吗?

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

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

相关文章

vue3路由跳转页面到顶部,Stable Diffusion使用ControlNet

打开新页面时,页面自动回到顶部 在router.js页面添加 router.beforeEach((to, from, next) > {// 在每次导航之前滚动到页面顶部window.scrollTo({top: 0,behavior: smooth // 可选的,使滚动平滑进行});next(); }); Controlnet ControlNet 是用来…

企业计算机服务器中了eking勒索病毒怎么办,eking勒索病毒解密数据恢复

随着计算机网络技术的不断发展与应用,企业的生产运营效率得到了极大提升,但网络安全威胁一直存在,网络威胁的技术也在不断更新,给企业的数据安全带来了严重威胁。在本月,云天数据恢复中心陆续接到很多企业的求助&#…

Windows安装kafka

压缩包下载地址:https://www.apache.org/dyn/closer.cgi?path/kafka/3.6.1/kafka_2.13-3.6.1.tgz 启动kafka步骤 zookeeper-server-start.bat rem 闭命令提示符窗口的命令回显,这样在运行脚本时不会显示脚本的具体命令内容 echo offrem 命令行启动未…

html实现动漫视频网站模板源码

文章目录 1.视频设计来源1.1 主界面1.2 动漫、电视剧、电影视频界面1.3 播放视频界面1.4 娱乐前线新闻界面1.5 关于我们界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/detail…

【小米电脑管家】安装使用教程--非小米电脑

安装说明功能体验下载资源 Xiaomi HyperOS发布后,小米妙享电脑端独立版本也走向终点,最新的【小米电脑管家】将会内置妙享实现万物互联。那么本篇文章将分享非小米电脑用户如何绕过设备识别验证安装使用【小米电脑管家】实现万物互联 安装说明 1.解压文…

构建外卖系统:使用Django框架

在当今数字化的时代,外卖系统的搭建不再是什么复杂的任务。通过使用Django框架,我们可以迅速建立一个强大、灵活且易于扩展的外卖系统。本文将演示如何使用Django构建一个简单的外卖系统,并包含一些基本的技术代码。 步骤一:安装…

SQL语句---删除索引

介绍 使用sql语句删除索引。由于索引会占用一定的磁盘空间,因此,为了避免影响数据库性能,应该及时删除不再使用的索引。 命令 drop index 索引名 on 表名;例子 删除a表中的singleidx索引: drop index singleidx on a;下面是执…

Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)

目录 一、前言 二、Bean配置信息重用 1.简介 : 2.实例 : 三、关于Bean的创建顺序 1.简介 : 2.实例 : 四、关于Bean的单例和多例 1.简介 : 2.实例 : 五、关于Bean的生命周期 1.简介 : 2.实例 : 六、Bean配置后置处理器 1.简介 : 2.实例 : 七、通过.properties文…

NestJS的微服务实现

1.1 基本概念 微服务基本概念:微服务就是将一个项目拆分成多个服务。举个简单的例子:将网站的登录功能可以拆分出来做成一个服务。 微服务分为提供者和消费者,如上“登录服务”就是一个服务提供者,“网站服务器”就是一个服务消…

Hive SQL间隔连续问题

问题引入 下面是某游戏公司记录的用户每日登录数据, 计算每个用户最大的连续登录天数,定义连续登录时可以间隔一天。举例:如果一个用户在 1,3,5,6,9 登录了游戏,则视为连续 6 天登录。 id dt1001 2021-12-121002 2021-12-12…

Zabbix监控腾讯云VPC

一、简介 私有网络(Virtual Private Cloud,VPC)是腾讯云上一块由用户自定义的逻辑隔离网络空间,为云服务器、云数据库等资源提供安全可控的网络环境。通过构建逻辑隔离的、用户自定义配置的网络空间,用户能够提升其云…

无参RCE [GXYCTF2019]禁止套娃1

打开题目 毫无思绪,先用御剑扫描一下 只能扫出index.php 我们尝试能不能用php伪协议读取flag php://filter/readconvert.base64-encode/resourceindex.php php://filter/readconvert.base64-encode/resourceflag.php 但是页面都回显了429 怀疑是不是源码泄露 用…

CTF网络安全大赛是干什么的?发展史、赛制、赛程介绍,参赛需要学什么?

CTF(Capture The Flag)是一种网络安全竞赛,它模拟了各种信息安全场景,旨在提升参与者的网络安全技能。CTF 赛事通常包含多种类型的挑战,如密码学、逆向工程、网络攻防、Web 安全、二进制利用等。 发展史 CTF 的概念…

「Python编程基础」第7章:字符串操作

文章目录 一、回顾二、新手容易踩坑的引号三、转义字符四、多行字符串写法五、注释六、字符串索引和切片七、字符串的in 和 not in八、字符串拼接九、转换大小写十、合并字符串join()十一、分割字符串split()十二、字符串替换 replace()十三、字符串内容判断方法十四、字符串内…

Nginx的性能优化、安全以及防盗链配置

目录 一、nginx的日志分割 二、nginx性能优化之启用epoll模型 三、nginx性能优化之设置worker进程数并与cpu进行绑核 四、nginx性能优化之调整worker的最大打开文件数和最大处理连接请求数量 五、nginx性能优化之启用gzip压缩,提高传输,减少带宽 六…

通俗易懂,什么是.NET Core以及.NET Core能做什么

我们都知道.NET Core是一个可以用来构建现代、可伸缩和高性能的跨平台软件应用程序的通用开发框架。可用于为Windows、Linux和MacOS构建软件应用程序。与其他软件框架不同,.NET Core是最通用的框架,可用于构建各种软件,包括Web应用程序、移动…

HLS实现图像膨胀和腐蚀运算--xf_dilation和xf_erosion

一、图像膨胀和图像腐蚀概念 我们先定义,需要处理的图片为二值化图像A。图片的背景色为黑色,即像素值为0。图片的目标色为白色,即像素值为1。 再定义一个结构元S,结构元范围内所有的像素为白色,像素值为1。 1、图像的…

《三十》模块化打包构建工具 Rollup

19的2小时06分钟 Rollup 是一个 JavaScript 的模块化打包工具,可以帮助编译微小的代码到庞大的复杂的代码中(例如一个库或者一个应用程序)。 Rollup 和 Webpack 的区别: Rollup 也是一个模块化的打包工具,但是它主要…

JUnit 之初体验

文章目录 1.定义2.引入1)使用 Maven 工具2)使用 Gradle 工具3)使用 Jar 包 2.样例0)前提1)测试类2)测试方法3)测试断言4)实施 总结 1.定义 JUnit 是一个流行的 Java 单元测试框架&a…

精选Axure原型设计模板,RP原型组件库(PC端移动端元件库及Axure函数及运算符说明)

好的原型组件会大大的提高产品经理的工作效率,小7在陆续整理、精选Axure 8的原型设计模板,包含了原型设计的常用元素和AxureRP 8函数及运算符的说明文档,及各种设备模板框架。 本文也是基于小7另一篇文章的补充,更多更详细的资料…