相关文章推荐
挂过科的葡萄  ·  使用MERGE ...·  6 月前    · 
有情有义的枇杷  ·  大模型与A卡跑大模型性能 - ...·  10 月前    · 
纯真的杯子  ·  为何外媒IGN总是给游戏打7分?官方编辑发文 ...·  1 年前    · 
俊逸的牛腩  ·  日本体育产业发展启示及“十九大”感悟-西安体 ...·  1 年前    · 
越狱的大脸猫  ·  12000字分析万青新作-虎嗅网·  2 年前    · 
Code  ›  利用OpenCV实现基于深度学习的超分辨率处理开发者社区
https://cloud.tencent.com/developer/article/1635759
威武的馒头
2 年前
小白学视觉

利用OpenCV实现基于深度学习的超分辨率处理

前往小程序,Get 更优 阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
小白学视觉
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > 利用OpenCV实现基于深度学习的超分辨率处理

利用OpenCV实现基于深度学习的超分辨率处理

作者头像
小白学视觉
发布 于 2020-05-31 10:10:45
2.1K 1
发布 于 2020-05-31 10:10:45
举报
文章被收录于专栏: 深度学习和计算机视觉 深度学习和计算机视觉

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++完整程序,之后对程序中每一行代码进行介绍。完整程序如下:

代码语言: javascript
复制
#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;}

首先加载我们选择的模型,并将其输入到神经网络的变量中。需要注意的是模型文件所存在的地址,本文放置在了程序的根目录中。

代码语言: javascript
复制
//Read the desired modelstring path = "FSRCNN_x2.pb";sr.readModel(path);

之后设置模型的种类和放大系数。本文选择的模型是fsrcnn,放大系数选择的2。

代码语言: javascript
复制
//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()函数进行超分辨率放大。

代码语言: javascript
复制
//UpscaleMat img_new;sr.upsample(img, img_new);cv::imwrite( "upscaled.png", img_new);

上述是C++代码,接下来给出Python实现超分辨率的代码

代码语言: javascript
复制
import cv2from cv2 import dnn_superres
# Create an SR objectsr = dnn_superres.DnnSuperResImpl_create()
# Read imageimage = cv2.imread('./input.png')
 
推荐文章
挂过科的葡萄  ·  使用MERGE INTO将插入更新和删除操作合并为单条语句-云原生大数据计算服务 MaxCompute-阿里云
6 月前
有情有义的枇杷  ·  大模型与A卡跑大模型性能 - 吴建明wujianming - 博客园
10 月前
纯真的杯子  ·  为何外媒IGN总是给游戏打7分?官方编辑发文解释了一下_游民百相|游民星空
1 年前
俊逸的牛腩  ·  日本体育产业发展启示及“十九大”感悟-西安体育学院-交流学院
1 年前
越狱的大脸猫  ·  12000字分析万青新作-虎嗅网
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号