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

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.mzph.cn/news/210769.shtml

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

相关文章

redis中使用事务保护数据完整性

事务是指一个执行过程,要么全部执行成功,要么失败什么都不改变。不会存在一部分成功一部分失败的情况,也就是事务的ACID四大特性(原子性、一致性、隔离性、持久性)。但是redis中的事务并不是严格意义上的事务&#xff…

使用flutter_native_splash替换启动图片,iOS端替换不成功

使用flutter_native_splash替换启动图片,iOS端替换不成功 1、删除App重启手机;2、重新创建一个新的LaunchScreen.storyboard,比如命名为NewLaunchScreen.storyboard,在General里面设置Launch Screen File为这个新的NewLaunchScree…

蓝桥杯 day01 奇怪的数列

题目描述 奇怪的数列 从 X 星截获一份电码,是一些数字,如下: 13 1113 3113 132113 1113122113 ⋯⋯ YY 博士经彻夜研究,发现了规律: 第一行的数字随便是什么,以后每一行都是对上一行"读出来…

智能优化算法应用:基于蝗虫算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于蝗虫算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于蝗虫算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蝗虫算法4.实验参数设定5.算法结果6.参考文献7.MA…

【数据挖掘】国科大苏桂平老师数据库新技术课程作业 —— 第二次作业

1 设 F { A B → C , B → D , C D → E , C E → G H , G → A } F\{AB\rightarrow C,B\rightarrow D, CD\rightarrow E, CE\rightarrow GH, G\rightarrow A \} F{AB→C,B→D,CD→E,CE→GH,G→A},用推理的方法证明 F ∣ A B → G F\;|AB\rightarrow G F∣AB→…

持续集成交付CICD:使用Maven命令上传Nexus制品

目录 一、实验 1.使用Maven命令上传Nexus制品(第一种方式) 2.使用Maven命令上传Nexus制品(第二种方式) 一、实验 1.使用Maven命令上传Nexus制品(第一种方式) (1)指定一个 hoste…

说说React jsx转换成真实DOM的过程?

在React中,JSX(JavaScript XML)是一种语法糖,用于描述用户界面的结构和组件关系。当你编写React组件并包含JS JSX解析:React中的JSX代码首先会被解析成JavaScript对象。这个过程通常是通过Babel等工具进行的&#xff0…

Flutter视频播放器在iOS端和Android端都能实现全屏播放

Flutter开发过程中,对于视频播放的三方组件有很多,在Android端适配都挺好,但是在适配iPhone手机的时候,如果设置了UIInterfaceOrientationLandscapeLeft和UIInterfaceOrientationLandscapeRight都为false的情况下,无法…

pytorch 笔记:dist 和 cdist

1 dist 1.1 基本使用方法 torch.dist(input, other, p2) 计算两个Tensor之间的p-范数 1.2 主要参数 input输入张量other另一个输入张量p范数 input 和 other的形状需要是可广播的 1.3 举例 import torchxtorch.randn(4) x #tensor([ 1.2698, -0.1209, 0.0462, -1.3271…

基于PaddleOCR银行卡识别实现(四)之uni-app离线插件

目的 在前三篇文章中完成了银行卡识别整个模型训练等工作,通过了解PaddleOCR的端侧部署,我们也可以将银行卡号检测模型和识别模型移植到手机中,做成一款uni-app手机端离线银行卡号识别的应用。 准备工作 为了不占用过多篇幅,这…

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

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

字节iconpark基于vue使用

1.安装 npm i icon-park/vue 2.导入 说明:导入并在main.js使用。 import { install } from icon-park/vue/es/all; import icon-park/vue/styles/index.css; Vue.use(install) 3.打开官网 ByteDance IconPark 4.复制 说明:点击官方图标库&#xff0c…

Java-JDBC操作MySQL

Java-JDBC操作MySQL 文章目录 Java-JDBC操作MySQL一、Java-JDBC-MySQL的关系二、创建连接三、登录MySQL四、操作数据库1、返回型操作2、无返回型操作 练习题目及完整代码 一、Java-JDBC-MySQL的关系 #mermaid-svg-B7qjXrosQaCOwRos {font-family:"trebuchet ms",verd…

国产Type-C PD芯片—接口快充取电芯片

常用USB PDTYPE-C受电端,即设备端协议IC芯片(PD Sink,也叫PD诱骗芯片),诱导取电芯片。 产品介绍 LDR6328: ◇ 采用 SOP-8 封装 ◇ 兼容 USB PD 3.0 规范,支持 USB PD 2.0 ◇ 兼容 QC 3.0 规范&#x…

TailwindCSS 支持文本文字超长溢出截断、文字文本省略号

前言 文本文字超长截断并自动补充省略号,这是前端日常开发工作中常用的样式设置能力,文字超长截断主要分为单行超长截断和多行超长截断。本文通过介绍基本CSS样式、tailwindcss 类设置两种基础方式来实现文字超长截断。 TailwindCSS 设置 单行文字超长…

WPF仿网易云搭建笔记(2):组件化开发

文章目录 前言专栏和Gitee仓库依赖属性实战:缩小,全屏,关闭按钮依赖属性操作封装主窗口传递this本身给TitleView标题控件主要代码MainWindow.xmalMainWindow.cs依赖属性方法封装TitleView.csTitleViewModelTitleViewModel实现效果 前言 这次…

基于以太坊的智能合约开发Solidity(函数继承篇)

参考教程:【实战篇】1、函数重载_哔哩哔哩_bilibili 1、函数重载: pragma solidity ^0.5.17;contract overLoadTest {//不带参数function test() public{}//带一个参数function test(address account) public{}//参数类型不同,虽然uint160可…

发送、接收消息,界面不及时刷新

发送、接收消息后 UI 没展示,不及时刷新,大概率 是 SDK 的 UI 刷新功能被干扰,参考下面排查: 检查 initWithAppkey 和 connectWithToken 使用的是否是 IMKit 核心类 RCIM 的方法,如果不是,请换成 RCIM 的。…

【刷题】位运算

2 n 2^n 2n 1<<n判断某一位是否为1 s&1<<k将上面两个组合&#xff0c;可以得到判断一个集合中哪些内容包含&#xff0c;遍历所有情况。 100140. 关闭分部的可行集合数目 一个公司在全国有 n 个分部&#xff0c;它们之间有的有道路连接。一开始&#xff0c;…

CentOS 7 离线安装达梦数据库8.0

前期准备工作 确认操作系统的版本和数据库的版本是否一致 ## 查看系统版本&#xff1a;cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core)关闭防火墙和Selinux # 查看selinux是不是disabled / enforce cat /etc/selinux/config## 查看防火墙状态 firewall-cmd …