← index
acidcamGL/source/plugin/medianblenddark_fast/median.cpp
Source: acidcamGL/source/plugin/medianblenddark_fast/median.cpp
#include"ac.h"

extern "C" void filter(cv::Mat  &frame) {
    static ac::MatrixCollection<8> collection;
    int r = 3+rand()%7;
    for(int i = 0; i < r; ++i)
        ac::MedianBlur(frame);
    
    collection.shiftFrames(frame);
    static double alpha = 1.0, alpha_max = 3.0;
   
    static auto callback = [&](cv::Mat *frame, int offset, int cols, int size) {
        for(int z = offset; z <  offset+size; ++z) {
            for(int i = 0; i < cols; ++i) {
                cv::Scalar value;
                for(int j = 0; j < collection.size(); ++j) {
                    cv::Vec3b pixel = collection.frames[j].at<cv::Vec3b>(z, i);
                    for(int q = 0; q < 3; ++q) {
                        value[q] -= pixel[q];
                    }
                }
                cv::Vec3b &pixel = ac::pixelAt(*frame,z, i);
                for(int j = 0; j < 3; ++j) {
                    int val = 1+static_cast<int>(value[j]);
                    pixel[j] = static_cast<unsigned char>(pixel[j] ^ val);
                }
            }
        }
    };
    ac::UseMultipleThreads(frame, 16, callback);
//    cv::Mat copyf = frame.clone();
    ac::setGamma(frame, frame, 4);
}