中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何利用OpenCV實現基于深度學習的超分辨率處理

發布時間:2021-07-14 14:39:53 來源:億速云 閱讀:551 作者:chen 欄目:大數據

這篇文章主要講解了“如何利用OpenCV實現基于深度學習的超分辨率處理”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何利用OpenCV實現基于深度學習的超分辨率處理”吧!


OpenCV是一個非常強大的計算機視覺處理的工具庫。很多小伙伴在入門圖像處理時都需要學習OpenCV的使用。但是隨著計算機視覺技術的發展,越來越多的算法涌現出來,人們逐漸覺得OpenCV比較落后而放棄了使用OpenCV。

但是,實際上OpenCV時一個與時俱進的開源代碼庫。正在逐漸的吸收和接納最新的算法。本文我們來介紹如何使用OpenCV實現基于深度學習的圖像超分辨率(SR)。使用OpenCV的好處就是,我們不需要知道任何圖像超分辨率的相關知識,就可以使用這個代碼,并實現圖像超分辨率。

具體操作步驟:

1. 安裝OpenCV contrib模塊

OpenCV中的超分辨率功能被集成在了contrib模塊中,因此我們首先需要安裝OpenCV的擴展模塊。安裝過程可以參考【從零學習OpenCV 4】opencv_contrib擴展模塊的安裝。超分辨率被集成在dnn_superres模塊中,如果小伙伴們電腦空間有限,可以只編譯這一個模塊。

近期有小伙伴反饋自己安裝擴展模塊失敗,為了解決這個問題,小白近期在籌劃搭建一個各個版本opencv-contrib編譯完成的數據庫。各位小伙伴隨時關注我們公眾號的動態。

2. 下載訓練的模型

由于某些模型比較大,因此OpenCV代碼庫中沒有包含他們,因此我們在使用的時候需要單獨的下載經過訓練的模型。目前,僅支持4種不同的超分辨率模型,他們可以實現2倍、3倍、4倍甚至8倍的圖像方法。這些模型具體如下:

EDSR:  這個是表現最好的模型。但是這個模型也是最大的,所以運行速度會比較慢。

ESPCN:  這個模型具有速度快,效果好的特點,并且模型較小。它可以進行對視頻進行實時處理(取決于圖像大小)。

FSRCNN  :這也是具有快速準確推斷功能的小型模型。也可以進行實時視頻升頻。

LapSRN:  這是一個中等大小的模型,它的特點是最大可以將圖像放大8倍。

公眾號后臺回復“  SR模型  ”獲取下載這四個模型的方式。

3. 通過程序實現超分辨率

我們首先給出C++完整程序,之后對程序中每一行代碼進行介紹。完整程序如下:
#include <opencv2/dnn_superres.hpp>#include <opencv2/imgproc.hpp>#include <opencv2/highgui.hpp>
using namespace std;using namespace cv;using namespace dnn;using namespace dnn_superres;
int main(int argc, char *argv[]){    //Create the module's object    DnnSuperResImpl sr;
   //Set the image you would like to upscale    string img_path = "image.png";    Mat img = cv::imread(img_path);
   //Read the desired model    string path = "FSRCNN_x2.pb";    sr.readModel(path);
   //Set the desired model and scale to get correct pre- and post-processing    sr.setModel("fsrcnn", 2);
   //Upscale    Mat img_new;    sr.upsample(img, img_new);    cv::imwrite( "upscaled.png", img_new);
   return 0;}
 
首先加載我們選擇的模型,并將其輸入到神經網絡的變量中。需要注意的是模型文件所存在的地址,本文放置在了程序的根目錄中。
//Read the desired modelstring path = "FSRCNN_x2.pb";sr.readModel(path);

之后設置模型的種類和放大系數。本文選擇的模型是fsrcnn,放大系數選擇的2。
//Set the desired model and scale to get correct pre- and post-processingsr.setModel("fsrcnn", 2);

可以選擇的模型有“ edsr”,“ fsrcnn”,“ lapsrn”,“ espcn”,這幾個參數就是我們剛才介紹的4中模型。需要注意的是,每個模型能夠放大的倍數是不一致的。前三種模型能夠放大2、3、4倍,最后一個模型能夠放大2、3、4、8倍。

之后通過upsample()函數進行超分辨率放大。  
//UpscaleMat img_new;sr.upsample(img, img_new);cv::imwrite( "upscaled.png", img_new);

上述是C++代碼,接下來給出Python實現超分辨率的代碼  
import cv2from cv2 import dnn_superres
# Create an SR objectsr = dnn_superres.DnnSuperResImpl_create()
# Read imageimage = cv2.imread('./input.png')
# Read the desired modelpath = "EDSR_x3.pb"sr.readModel(path)
# Set the desired model and scale to get correct pre- and post-processingsr.setModel("edsr", 3)
# Upscale the imageresult = sr.upsample(image)
# Save the imagecv2.imwrite("./upscaled.png", result)

不同于C++代碼,在使用python代碼時,需要先通過如下代碼進行聲明。
# Create an SR objectsr = dnn_superres.DnnSuperResImpl_create()
 
4. 處理結果

如何利用OpenCV實現基于深度學習的超分辨率處理

輸入圖像  

如何利用OpenCV實現基于深度學習的超分辨率處理

雙線性插值放大3倍

如何利用OpenCV實現基于深度學習的超分辨率處理

FSRCNN放大3倍

如何利用OpenCV實現基于深度學習的超分辨率處理

ESDR放大3倍

感謝各位的閱讀,以上就是“如何利用OpenCV實現基于深度學習的超分辨率處理”的內容了,經過本文的學習后,相信大家對如何利用OpenCV實現基于深度學習的超分辨率處理這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

灵台县| 武冈市| 环江| 广灵县| 邯郸市| 鹿泉市| 南溪县| 仙游县| 开远市| 全椒县| 海口市| 灵台县| 嘉峪关市| 颍上县| 鹰潭市| 平乐县| 屏东县| 泊头市| 扶余县| 新龙县| 宜昌市| 修武县| 葫芦岛市| 威海市| 平陆县| 河西区| 马边| 水富县| 紫金县| 泗洪县| 石河子市| 永昌县| 汤阴县| 呼和浩特市| 鲁甸县| 永顺县| 顺昌县| 晴隆县| 安吉县| 沾化县| 西乌|