mirror of
https://github.com/lltcggie/waifu2x-caffe.git
synced 2025-06-26 13:42:48 +00:00
126 lines
4.3 KiB
C
126 lines
4.3 KiB
C
|
#pragma once
|
|||
|
|
|||
|
#include "waifu2x.h"
|
|||
|
|
|||
|
|
|||
|
class stImage
|
|||
|
{
|
|||
|
private:
|
|||
|
cv::Mat mOrgFloatImage;
|
|||
|
int mOrgChannel;
|
|||
|
cv::Size_<int> mOrgSize;
|
|||
|
|
|||
|
bool mIsRequestDenoise;
|
|||
|
|
|||
|
cv::Mat mTmpImageRGB; // RGB(<28><><EFBFBD>邢<EFBFBD><E982A2>Y)
|
|||
|
cv::Mat mTmpImageA; // <20><><EFBFBD>`<60><><EFBFBD><EFBFBD><EFBFBD>l<EFBFBD><6C>
|
|||
|
|
|||
|
cv::Mat mEndImage; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>摜
|
|||
|
|
|||
|
int pad_w1;
|
|||
|
int pad_h1;
|
|||
|
int pad_w2;
|
|||
|
int pad_h2;
|
|||
|
|
|||
|
public:
|
|||
|
struct stOutputExtentionElement
|
|||
|
{
|
|||
|
std::wstring ext;
|
|||
|
std::vector<int> depthList;
|
|||
|
boost::optional<int> imageQualityStart;
|
|||
|
boost::optional<int> imageQualityEnd;
|
|||
|
boost::optional<int> imageQualityDefault;
|
|||
|
boost::optional<int> imageQualitySettingVolume;
|
|||
|
};
|
|||
|
|
|||
|
const static std::vector<stOutputExtentionElement> OutputExtentionList;
|
|||
|
|
|||
|
private:
|
|||
|
static Waifu2x::eWaifu2xError LoadMatBySTBI(cv::Mat &im, const std::vector<char> &img_data);
|
|||
|
|
|||
|
static cv::Mat ConvertToFloat(const cv::Mat &im);
|
|||
|
|
|||
|
static Waifu2x::eWaifu2xError AlphaMakeBorder(std::vector<cv::Mat> &planes, const cv::Mat &alpha, const int offset);
|
|||
|
|
|||
|
static cv::Mat DeconvertFromFloat(const cv::Mat &im, const int depth);
|
|||
|
static void AlphaCleanImage(cv::Mat &im);
|
|||
|
|
|||
|
static Waifu2x::eWaifu2xError WriteMat(const cv::Mat &im, const boost::filesystem::path &output_file, const boost::optional<int> &output_quality);
|
|||
|
|
|||
|
void ConvertToNetFormat(const int input_plane, const int alpha_offset);
|
|||
|
|
|||
|
Waifu2x::eWaifu2xError CreateBrightnessImage(const cv::Mat &float_image, cv::Mat &im);
|
|||
|
void PaddingImage(const cv::Mat &input, const int net_offset, const int outer_padding,
|
|||
|
const int crop_w, const int crop_h, cv::Mat &output);
|
|||
|
Waifu2x::eWaifu2xError CreateZoomColorImage(const cv::Mat &float_image, const cv::Size_<int> &zoom_size, std::vector<cv::Mat> &cubic_planes);
|
|||
|
|
|||
|
// <20>g<EFBFBD><67><EFBFBD>A<EFBFBD>p<EFBFBD>f<EFBFBD>B<EFBFBD><42><EFBFBD>O<EFBFBD><4F><EFBFBD>ꂽ<EFBFBD>摜<EFBFBD><E6919C><EFBFBD>擾
|
|||
|
// <20><><EFBFBD>̊<CC8A><D690><EFBFBD><EFBFBD>Ăяo<D18F><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AmTmpImageRGB<47>͋<EFBFBD><CD8B>ɂȂ<C982><C882>̂Œ<CC82><C592><EFBFBD>
|
|||
|
void GetScalePaddingedImage(cv::Mat &in, cv::Mat &out, cv::Size_<int> &size, const int net_offset, const int outer_padding,
|
|||
|
const int crop_w, const int crop_h, const int scale);
|
|||
|
|
|||
|
// <20>ϊ<EFBFBD><CF8A><EFBFBD><EFBFBD>ꂽ<EFBFBD>摜<EFBFBD><E6919C><EFBFBD>ݒ<EFBFBD>
|
|||
|
// size: GetScalePaddingedImage()<29>Ŏ擾<C58E><E693BE><EFBFBD><EFBFBD>size
|
|||
|
void SetReconstructedImage(cv::Mat &dst, cv::Mat &src, const cv::Size_<int> &size, const int inner_scale);
|
|||
|
|
|||
|
void DeconvertFromNetFormat(const int input_plane);
|
|||
|
void ShrinkImage(const double scale);
|
|||
|
|
|||
|
static int DepthBitToCVDepth(const int depth_bit);
|
|||
|
static double GetValumeMaxFromCVDepth(const int cv_depth);
|
|||
|
static double GetEPS(const int cv_depth);
|
|||
|
|
|||
|
public:
|
|||
|
stImage();
|
|||
|
~stImage();
|
|||
|
|
|||
|
void Clear();
|
|||
|
|
|||
|
static Waifu2x::eWaifu2xError LoadMat(cv::Mat &im, const boost::filesystem::path &input_file);
|
|||
|
|
|||
|
Waifu2x::eWaifu2xError Load(const boost::filesystem::path &input_file);
|
|||
|
|
|||
|
// source: (4<>`<60><><EFBFBD><EFBFBD><EFBFBD>l<EFBFBD><6C><EFBFBD>̏ꍇ<CC8F><EA8D87>)RGBA<42>ȉ<EFBFBD><C889>f<EFBFBD>z<EFBFBD><7A>
|
|||
|
// dest: (4<>`<60><><EFBFBD><EFBFBD><EFBFBD>l<EFBFBD><6C><EFBFBD>̏ꍇ<CC8F><EA8D87>)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RGBA<42>ȉ<EFBFBD><C889>f<EFBFBD>z<EFBFBD><7A>
|
|||
|
// width: width<74>̏c<CC8F><63>
|
|||
|
// height: height<68>̉<EFBFBD><CC89><EFBFBD>
|
|||
|
// channel: source<63>̃`<60><><EFBFBD><EFBFBD><EFBFBD>l<EFBFBD><6C><EFBFBD><EFBFBD>
|
|||
|
// stride: source<63>̃X<CC83>g<EFBFBD><67><EFBFBD>C<EFBFBD>h(<28>o<EFBFBD>C<EFBFBD>g<EFBFBD>P<EFBFBD><50>)
|
|||
|
// source<63><65>Postprocess()<29><><EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD>܂ő<DC82><C591>݂<EFBFBD><DD82>Ă<EFBFBD><C482><EFBFBD><EFBFBD>K<EFBFBD>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Waifu2x::eWaifu2xError Load(const void* source, const int width, const int height, const int channel, const int stride);
|
|||
|
|
|||
|
bool RequestDenoise() const;
|
|||
|
|
|||
|
// <20>O<EFBFBD><4F><EFBFBD><EFBFBD>
|
|||
|
// RGB<47><42><EFBFBD>f<EFBFBD><66><EFBFBD>̏ꍇ<CC8F>͂<EFBFBD><CD82>ꂪ<EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD>mOrgFloatImage<67><65><EFBFBD><EFBFBD><EFBFBD>ɂȂ<C982><C882>Ă<EFBFBD><C482><EFBFBD><EFBFBD>̂Œ<CC82><C592><EFBFBD>
|
|||
|
void Preprocess(const int input_plane, const int net_offset);
|
|||
|
|
|||
|
bool HasAlpha() const;
|
|||
|
|
|||
|
// <20>g<EFBFBD><67><EFBFBD>A<EFBFBD>p<EFBFBD>f<EFBFBD>B<EFBFBD><42><EFBFBD>O<EFBFBD><4F><EFBFBD>ꂽ<EFBFBD>摜<EFBFBD><E6919C><EFBFBD>擾
|
|||
|
// <20><><EFBFBD>̊<CC8A><D690><EFBFBD><EFBFBD>Ăяo<D18F><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AmTmpImageRGB<47>͋<EFBFBD><CD8B>ɂȂ<C982><C882>̂Œ<CC82><C592><EFBFBD>
|
|||
|
void GetScalePaddingedRGB(cv::Mat &im, cv::Size_<int> &size, const int net_offset, const int outer_padding,
|
|||
|
const int crop_w, const int crop_h, const int scale);
|
|||
|
|
|||
|
// <20>ϊ<EFBFBD><CF8A><EFBFBD><EFBFBD>ꂽ<EFBFBD>摜<EFBFBD><E6919C><EFBFBD>ݒ<EFBFBD>
|
|||
|
// <20><><EFBFBD>̊<CC8A><D690><EFBFBD><EFBFBD>Ăяo<D18F><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Aim<69>͋<EFBFBD><CD8B>ɂȂ<C982><C882>̂Œ<CC82><C592><EFBFBD>
|
|||
|
// size: GetScalePaddingedImage()<29>Ŏ擾<C58E><E693BE><EFBFBD><EFBFBD>size
|
|||
|
void SetReconstructedRGB(cv::Mat &im, const cv::Size_<int> &size, const int inner_scale);
|
|||
|
|
|||
|
// <20>g<EFBFBD><67><EFBFBD>A<EFBFBD>p<EFBFBD>f<EFBFBD>B<EFBFBD><42><EFBFBD>O<EFBFBD><4F><EFBFBD>ꂽ<EFBFBD>摜<EFBFBD><E6919C><EFBFBD>擾
|
|||
|
// <20><><EFBFBD>̊<CC8A><D690><EFBFBD><EFBFBD>Ăяo<D18F><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AmTmpImageA<65>͋<EFBFBD><CD8B>ɂȂ<C982><C882>̂Œ<CC82><C592><EFBFBD>
|
|||
|
void GetScalePaddingedA(cv::Mat &im, cv::Size_<int> &size, const int net_offset, const int outer_padding,
|
|||
|
const int crop_w, const int crop_h, const int scale);
|
|||
|
|
|||
|
// <20>g<EFBFBD>傳<EFBFBD>ꂽ<EFBFBD>摜<EFBFBD><E6919C><EFBFBD>ݒ<EFBFBD>
|
|||
|
// <20><><EFBFBD>̊<CC8A><D690><EFBFBD><EFBFBD>Ăяo<D18F><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Aim<69>͋<EFBFBD><CD8B>ɂȂ<C982><C882>̂Œ<CC82><C592><EFBFBD>
|
|||
|
// size: GetScalePaddingedImage()<29>Ŏ擾<C58E><E693BE><EFBFBD><EFBFBD>size
|
|||
|
void SetReconstructedA(cv::Mat &im, const cv::Size_<int> &size, const int inner_scale);
|
|||
|
|
|||
|
void Postprocess(const int input_plane, const double scale, const int depth);
|
|||
|
|
|||
|
cv::Mat GetEndImage() const;
|
|||
|
|
|||
|
Waifu2x::eWaifu2xError Save(const boost::filesystem::path &output_file, const boost::optional<int> &output_quality);
|
|||
|
};
|