New filter color: tends to a given color; sepia is grey + color filter

This commit is contained in:
Némunaire 2012-07-16 10:12:03 +02:00
parent 4e5521c564
commit b6b2e9c24f
6 changed files with 52 additions and 3 deletions

View File

@ -14,7 +14,7 @@ AC_CONFIG_MACRO_DIR([m4])
# Look for a C++ compiler.CXXFLAGS_save="$CXXFLAGS"
AC_PROG_CXX
AC_PROG_RANLIB
CXXFLAGS="$CXXFLAGS_save -std=c++11 -g -O0"
CXXFLAGS="$CXXFLAGS_save -std=c++0x -g -O0"
AM_SILENT_RULES([yes])
AC_ARG_ENABLE(debug,

View File

@ -7,4 +7,4 @@ AM_CXXFLAGS = \
$(DEBUG_CXXFLAGS)
______lib_libfilterSample_a_SOURCES = grey.cc reverse.cc merge.cc \
interlace.cc inlay.cc blur.cc cartoon.cc count.cc
interlace.cc inlay.cc blur.cc cartoon.cc count.cc color.cc

20
src/filterSample/color.cc Normal file
View File

@ -0,0 +1,20 @@
#include "color.hh"
#include "opencv2/opencv.hpp"
void* Color::operator()(void* para)
{
cv::Mat* mat = (cv::Mat*)para;
if (mat == nullptr)
return nullptr;
for (size_t i = 0; i < mat->rows; ++i)
for (size_t j = 0; j < mat->cols; ++j)
{
mat->at<cv::Vec3b>(i, j)[0] = mat->at<cv::Vec3b>(i, j)[0] * this->ref_[0] / 255;
mat->at<cv::Vec3b>(i, j)[1] = mat->at<cv::Vec3b>(i, j)[1] * this->ref_[1] / 255;
mat->at<cv::Vec3b>(i, j)[2] = mat->at<cv::Vec3b>(i, j)[2] * this->ref_[2] / 255;
}
return mat;
}

17
src/filterSample/color.hh Normal file
View File

@ -0,0 +1,17 @@
#ifndef COLOR_HH_
# define COLOR_HH_
# include "tbb/pipeline.h"
# include "opencv2/opencv.hpp"
class Color: public tbb::filter
{
public:
Color(cv::Vec3b ref)
: filter(tbb::filter::parallel), ref_(ref) {}
void* operator()(void*);
private:
cv::Vec3b ref_;
};
#endif /* !COLOR_HH_ */

View File

@ -110,7 +110,7 @@ int main (int argc, char** argv)
if (!pipe.add_filter(filter.first, filter.second))
{
std::cerr << argv[0] << ": Unknown filter `"
<< filter.first << "'" << std::endl;
<< filter.first << "'" << filter.second.size() << std::endl;
return 2;
}
}

View File

@ -14,6 +14,7 @@
#include "filterSample/interlace.hh"
#include "filterSample/inlay.hh"
#include "filterSample/count.hh"
#include "filterSample/color.hh"
Pipeline::Pipeline(std::list<VideoReader> input, VideoWriter output)
: input_(input), output_(output)
@ -33,6 +34,17 @@ bool Pipeline::add_filter(std::string filter, std::vector<int> args)
this->pipeline_.add_filter(*(new Cartoon()));
else if (filter == "count")
this->pipeline_.add_filter(*(new Count()));
else if (filter == "color" && args.size() >= 3)
this->pipeline_.add_filter(*(new Color(cv::Vec3b {
(unsigned char) args[0],
(unsigned char) args[1],
(unsigned char) args[2]
})));
else if (filter == "sepia")
{
this->pipeline_.add_filter(*(new Grey()));
this->pipeline_.add_filter(*(new Color(cv::Vec3b { 40, 74, 130 })));
}
else if (filter == "blur")
{
if (args.size() >= 1)