Repository for OpenCV's extra modules
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

121 lines
3.2 KiB

// This file is part of OpenCV project.
// It is subject to the license terms in the LICENSE file found in the top-level directory
// of this distribution and at http://opencv.org/license.html.
#ifndef _OPENCV_DNN_SUPERRES_HPP_
#define _OPENCV_DNN_SUPERRES_HPP_
/** @defgroup dnn_superres DNN used for super resolution
This module contains functionality for upscaling an image via convolutional neural networks.
The following four models are implemented:
- EDSR <https://arxiv.org/abs/1707.02921>
- ESPCN <https://arxiv.org/abs/1609.05158>
- FSRCNN <https://arxiv.org/abs/1608.00367>
- LapSRN <https://arxiv.org/abs/1710.01992>
*/
#include "opencv2/core.hpp"
#include "opencv2/dnn.hpp"
namespace cv
{
namespace dnn_superres
{
//! @addtogroup dnn_superres
//! @{
/** @brief A class to upscale images via convolutional neural networks.
The following four models are implemented:
- edsr
- espcn
- fsrcnn
- lapsrn
*/
class CV_EXPORTS DnnSuperResImpl
{
private:
/** @brief Net which holds the desired neural network
*/
dnn::Net net;
std::string alg; //algorithm
int sc; //scale factor
void reconstruct_YCrCb(InputArray inpImg, InputArray origImg, OutputArray outpImg, int scale);
void preprocess_YCrCb(InputArray inpImg, OutputArray outpImg);
public:
/** @brief Empty constructor
*/
DnnSuperResImpl();
/** @brief Constructor which immediately sets the desired model
@param algo String containing one of the desired models:
- __edsr__
- __espcn__
- __fsrcnn__
- __lapsrn__
@param scale Integer specifying the upscale factor
*/
DnnSuperResImpl(const std::string& algo, int scale);
/** @brief Read the model from the given path
@param path Path to the model file.
*/
void readModel(const std::string& path);
/** @brief Read the model from the given path
@param weights Path to the model weights file.
@param definition Path to the model definition file.
*/
void readModel(const std::string& weights, const std::string& definition);
/** @brief Set desired model
@param algo String containing one of the desired models:
- __edsr__
- __espcn__
- __fsrcnn__
- __lapsrn__
@param scale Integer specifying the upscale factor
*/
void setModel(const std::string& algo, int scale);
/** @brief Upsample via neural network
@param img Image to upscale
@param result Destination upscaled image
*/
void upsample(InputArray img, OutputArray result);
/** @brief Upsample via neural network of multiple outputs
@param img Image to upscale
@param imgs_new Destination upscaled images
@param scale_factors Scaling factors of the output nodes
@param node_names Names of the output nodes in the neural network
*/
void upsampleMultioutput(InputArray img, std::vector<Mat> &imgs_new, const std::vector<int>& scale_factors, const std::vector<String>& node_names);
/** @brief Returns the scale factor of the model:
@return Current scale factor.
*/
int getScale();
/** @brief Returns the scale factor of the model:
@return Current algorithm.
*/
std::string getAlgorithm();
};
//! @} dnn_superres
}} // cv::dnn_superres::
#endif