在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.pswp.cn/news/210769.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210769.shtml
英文地址,請注明出處:http://en.pswp.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 …