利用OpenCV實現(xiàn)基于深度學(xué)習(xí)的超分辨率處理
點擊上方“小白學(xué)視覺”,選擇加"星標"或“置頂”
重磅干貨,第一時間送達
OpenCV是一個非常強大的計算機視覺處理的工具庫。很多小伙伴在入門圖像處理時都需要學(xué)習(xí)OpenCV的使用。但是隨著計算機視覺技術(shù)的發(fā)展,越來越多的算法涌現(xiàn)出來,人們逐漸覺得OpenCV比較落后而放棄了使用OpenCV。
但是,實際上OpenCV時一個與時俱進的開源代碼庫。正在逐漸的吸收和接納最新的算法。本文我們來介紹如何使用OpenCV實現(xiàn)基于深度學(xué)習(xí)的圖像超分辨率(SR)。使用OpenCV的好處就是,我們不需要知道任何圖像超分辨率的相關(guān)知識,就可以使用這個代碼,并實現(xiàn)圖像超分辨率。
1. 安裝OpenCV contrib模塊
OpenCV中的超分辨率功能被集成在了contrib模塊中,因此我們首先需要安裝OpenCV的擴展模塊。安裝過程可以參考【從零學(xué)習(xí)OpenCV 4】opencv_contrib擴展模塊的安裝。超分辨率被集成在dnn_superres模塊中,如果小伙伴們電腦空間有限,可以只編譯這一個模塊。
近期有小伙伴反饋自己安裝擴展模塊失敗,為了解決這個問題,小白近期在籌劃搭建一個各個版本opencv-contrib編譯完成的數(shù)據(jù)庫。各位小伙伴隨時關(guān)注我們公眾號的動態(tài)。
2. 下載訓(xùn)練的模型
由于某些模型比較大,因此OpenCV代碼庫中沒有包含他們,因此我們在使用的時候需要單獨的下載經(jīng)過訓(xùn)練的模型。目前,僅支持4種不同的超分辨率模型,他們可以實現(xiàn)2倍、3倍、4倍甚至8倍的圖像方法。這些模型具體如下:
#include#include#includeusing namespace std;using namespace cv;using namespace dnn;using namespace dnn_superres;int main(int argc, char *argv[]){//Create the module's objectDnnSuperResImpl sr;//Set the image you would like to upscalestring img_path = "image.png";Mat img = cv::imread(img_path);//Read the desired modelstring path = "FSRCNN_x2.pb";sr.readModel(path);//Set the desired model and scale to get correct pre- and post-processingsr.setModel("fsrcnn", 2);//UpscaleMat 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);
//Set?the?desired?model?and?scale?to?get?correct?pre-?and?post-processingsr.setModel("fsrcnn", 2);
//UpscaleMat img_new;sr.upsample(img, img_new);cv::imwrite( "upscaled.png", img_new);
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)
# Create an SR objectsr = dnn_superres.DnnSuperResImpl_create()


雙線性插值放大3倍

FSRCNN放大3倍

ESDR放大3倍
交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~

