From c5fab1865c5c8b7fea4d138fd34524fa37fe0451 Mon Sep 17 00:00:00 2001 From: Moskalenko Date: Fri, 21 Aug 2015 14:11:58 +0300 Subject: [PATCH 1/2] NOT_READY --- src/retro_filter.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/retro_filter.cpp b/src/retro_filter.cpp index 5956869..b1d4af1 100644 --- a/src/retro_filter.cpp +++ b/src/retro_filter.cpp @@ -1,5 +1,6 @@ #include "retro_filter.hpp" #include "opencv2/imgproc/imgproc.hpp" +#include "time.h" using namespace std; using namespace cv; From bdb807ad40d6e8873efd39a443de225390a23b05 Mon Sep 17 00:00:00 2001 From: Moskalenko Date: Fri, 21 Aug 2015 17:43:51 +0300 Subject: [PATCH 2/2] Add_Filters --- include/retro_filter.hpp | 3 +- sample/retro_sample.cpp | 14 +++++++-- src/retro_filter.cpp | 61 ++++++++++++++++++++++++++-------------- 3 files changed, 54 insertions(+), 24 deletions(-) diff --git a/include/retro_filter.hpp b/include/retro_filter.hpp index 86f3ee5..1e00d76 100644 --- a/include/retro_filter.hpp +++ b/include/retro_filter.hpp @@ -16,11 +16,12 @@ class RetroFilter RetroFilter(const Parameters& params); virtual ~RetroFilter() {}; - void applyToVideo(const cv::Mat& frame, cv::Mat& retroFrame); + void applyToVideo(const cv::Mat& frame, cv::Mat& retroFrame, int flag); private: Parameters params_; cv::RNG rng_; + cv::Mat a,b,c; float hsvScale_; float hsvOffset_; diff --git a/sample/retro_sample.cpp b/sample/retro_sample.cpp index d4b031e..d70e5e8 100644 --- a/sample/retro_sample.cpp +++ b/sample/retro_sample.cpp @@ -31,6 +31,7 @@ const char* params = int main(int argc, const char** argv) { + int flag = 49; // Parse command line arguments CommandLineParser parser(argc, argv, params); @@ -100,14 +101,23 @@ int main(int argc, const char** argv) { Mat retroFrame; TS(filter); - filter.applyToVideo(frame, retroFrame); + filter.applyToVideo(frame, retroFrame, flag); TE(filter); imshow("Original Movie", frame); imshow("Retro Movie", retroFrame); char c = (char) waitKey(1); - if( c == 27 ) // Esc + switch (c) + { + case 49: { flag = 49; break; }; + case 50: { flag = 50; break; }; + case 51: { flag = 51; break; }; + } + + if (c == 27) + { break; + } capture >> frame; if(frame.empty()) break; diff --git a/src/retro_filter.cpp b/src/retro_filter.cpp index f38b65a..7478e78 100644 --- a/src/retro_filter.cpp +++ b/src/retro_filter.cpp @@ -34,7 +34,7 @@ RetroFilter::RetroFilter(const Parameters& params) : rng_(time(0)) hsvOffset_ = 20; } -void RetroFilter::applyToVideo(const Mat& frame, Mat& retroFrame) +void RetroFilter::applyToVideo(const Mat& frame, Mat& retroFrame, int flag) { int col, row; Mat luminance; @@ -46,14 +46,9 @@ void RetroFilter::applyToVideo(const Mat& frame, Mat& retroFrame) int x = rng_.uniform(0, params_.scratches.cols - luminance.cols); int y = rng_.uniform(0, params_.scratches.rows - luminance.rows); - for (row = 0; row < luminance.size().height; row += 1) - { - for (col = 0; col < luminance.size().width; col += 1) - { - uchar pix_color = params_.scratches.at(row + y, col + x) ? (int)scratchColor.at(row, col) : luminance.at(row, col); - luminance.at(row, col) = pix_color; - } - } + Rect rect(x, y, luminance.cols, luminance.rows); + Mat qqq = params_.scratches(rect); + luminance.setTo(meanColor * 2.0, qqq); // Add fuzzy border Mat borderColor(params_.frameSize, CV_32FC1, Scalar::all(meanColor[0] * 1.5)); @@ -62,21 +57,45 @@ void RetroFilter::applyToVideo(const Mat& frame, Mat& retroFrame) // Apply sepia-effect retroFrame.create(luminance.size(), CV_8UC3); - Mat hsv_pixel(1, 1, CV_8UC3); - Mat rgb_pixel(1, 1, CV_8UC3); - for (col = 0; col < luminance.size().width; col += 1) + + switch (flag) { - for (row = 0; row < luminance.size().height; row += 1) + case 49: { - hsv_pixel.ptr()[2] = cv::saturate_cast(luminance.at(row, col) * hsvScale_ + hsvOffset_); - hsv_pixel.ptr()[0] = 19; - hsv_pixel.ptr()[1] = 78; + Mat a,b,c; + a.create( luminance.size(),CV_8UC1); + a.setTo(19); + b.create( luminance.size(),CV_8UC1); + b.setTo(78); + c.create( luminance.size(),CV_8UC1); + c = luminance * hsvScale_ + hsvOffset_; - cvtColor(hsv_pixel, rgb_pixel, CV_HSV2RGB); - - retroFrame.at(row, col)[0] = rgb_pixel.ptr()[2]; - retroFrame.at(row, col)[1] = rgb_pixel.ptr()[1]; - retroFrame.at(row, col)[2] = rgb_pixel.ptr()[0]; + std::vector mat; + mat.push_back(a); + mat.push_back(b); + mat.push_back(c); + cv::merge(mat,retroFrame); + cv::cvtColor(retroFrame,retroFrame,COLOR_HSV2BGR); + break; + } + case 50: + { + std::vector mat; + mat.push_back(luminance); + mat.push_back(luminance); + mat.push_back(luminance); + cv::merge(mat,retroFrame); + break; + } + case 51: + { + std::vector mat; + mat.push_back(luminance); + mat.push_back(luminance); + mat.push_back(luminance); + cv::merge(mat,retroFrame); + cv::cvtColor(retroFrame,retroFrame,COLOR_HSV2BGR); + break; } } }