void addAdditiveNoize(const cv::Mat& src, cv::Mat& dst, double mean, double stddev) { CV_Assert(src.type() == CV_8UC1); cv::RNG rng; src.copyTo(dst); cv::Mat noize(dst.rows, dst.cols, dst.type(), cv::Scalar(0)); cv::randn(noize, mean, stddev); dst += noize; }
fullcircle::Sequence::Ptr mk_perlin_noise() { std::cout << "Generating Perlin noise demo sequence." << std::endl; fullcircle::ColorScheme::Ptr smash(new fullcircle::ColorSchemeSmash()); fullcircle::Sequence::Ptr seq(new fullcircle::Sequence(25,8,8)); fullcircle::FrameFader::Ptr fader(new fullcircle::FrameFader(5,25)); fullcircle::PerlinNoise::Ptr noize(new fullcircle::PerlinNoise( 3, // octaves .42, // freq 2.4, // amplitude 42 // seed )); for( uint32_t frameID = 0; frameID < 100; ++frameID) { fullcircle::Frame::Ptr frame(new fullcircle::Frame(8,8)); frame->fill_whole(smash->get_background()); for( uint16_t x = 0; x < 8; ++x) { for( uint16_t y = 0; y < 8; ++y) { float n=noize->get_3d(x/8.0f, y/8.0f, frameID/10.0f); // determine color if (0<=n && n<0.3) { frame->set_pixel(x,y,smash->get_primary()); } else if (0.3<=n && n<0.7) { frame->set_pixel(x,y,smash->get_secondary()); } else if (0.7<=n && n<=1.0) { frame->set_pixel(x,y,smash->get_background()); } else { std::cout << "Error: Unknown noise value: " << n << std::endl; } } } if (seq->size() == 0) seq->add_frame(frame); else seq = (*seq) << fader->fade(seq->get_last_frame(), frame); } return seq; }