diff --git a/modules/photo/include/opencv2/photo.hpp b/modules/photo/include/opencv2/photo.hpp index beec929235..e656b93e8a 100644 --- a/modules/photo/include/opencv2/photo.hpp +++ b/modules/photo/include/opencv2/photo.hpp @@ -288,6 +288,8 @@ public: CV_EXPORTS_W Ptr createMergeRobertson(); +CV_EXPORTS_W void decolor(InputArray src, OutputArray grayscale, OutputArray color_boost); + } // cv #endif diff --git a/modules/photo/src/contrast_preserve.cpp b/modules/photo/src/contrast_preserve.cpp new file mode 100644 index 0000000000..271afb5e7e --- /dev/null +++ b/modules/photo/src/contrast_preserve.cpp @@ -0,0 +1,76 @@ +#include "precomp.hpp" +#include "opencv2/photo.hpp" +#include "opencv2/imgproc.hpp" +#include "math.h" +#include +#include +#include + +#include "contrast_preserve.hpp" + +using namespace std; +using namespace cv; +int rounding(double); + +int rounding(double a) +{ + return int(a + 0.5); +} + +void cv::decolor(InputArray _src, OutputArray _gray, OutputArray _boost) +{ + Mat I = _src.getMat(); + _gray.create(I.size(), CV_8UC1); + Mat dst = _gray.getMat(); + + _boost.create(I.size(), CV_8UC3); + Mat color_boost = _boost.getMat(); + + if(!I.data ) + { + cout << "Could not open or find the image" << endl ; + return; + } + if(I.channels() !=3) + { + cout << "Input Color Image" << endl; + return; + } + + float sigma = .02; + int maxIter = 8; + int iterCount = 0; + + int h = I.size().height; + int w = I.size().width; + + Mat img; + Decolor obj; + + double sizefactor; + + if((h + w) > 900) + { + sizefactor = (double)900/(h+w); + resize(I,I,Size(rounding(h*sizefactor),rounding(w*sizefactor))); + img = Mat(I.size(),CV_32FC3); + I.convertTo(img,CV_32FC3,1.0/255.0); + } + else + { + img = Mat(I.size(),CV_32FC3); + I.convertTo(img,CV_32FC3,1.0/255.0); + } + + obj.init(); + + vector Cg; + vector < vector > polyGrad; + vector < vector > bc; + vector < vector < int > > comb; + + vector alf; + + +} + diff --git a/modules/photo/src/contrast_preserve.hpp b/modules/photo/src/contrast_preserve.hpp new file mode 100644 index 0000000000..5c6cd50cf9 --- /dev/null +++ b/modules/photo/src/contrast_preserve.hpp @@ -0,0 +1,31 @@ +#include "precomp.hpp" +#include "opencv2/photo.hpp" +#include "opencv2/imgproc.hpp" +#include "math.h" +#include +#include + +using namespace std; +using namespace cv; + +class Decolor +{ + public: + Mat kernel; + Mat kernel1; + int order; + void init(); + void grad_system(Mat img, vector < vector < double > > &polyGrad, vector < double > &Cg, vector < vector >& comb); +}; + +void Decolor::init() +{ + kernel = Mat(1,2, CV_32FC1); + kernel1 = Mat(2,1, CV_32FC1); + kernel.at(0,0)=1.0; + kernel.at(0,1)=-1.0; + kernel1.at(0,0)=1.0; + kernel1.at(1,0)=-1.0; + order = 2; + +}