1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
#ifndef ROTOR_FILTERS
#define ROTOR_FILTERS
#include "rotor.h"
namespace Rotor {
class Blur: public Image_node {
public:
Blur(){
title="Blur";
description="Gaussian blur filter";
create_parameter("size","number","Blur window size","Size",1.0);
create_image_input("image input","Image input");
NODEID="36.0412-2d0b-11e3-b86b-a31ab5838db2";
};
Blur(map<string,string> &settings):Blur() {
base_settings(settings);
};
~Blur(){
};
Blur* clone(map<string,string> &_settings) { return new Blur(_settings);};
Image *output(const Frame_spec &frame){
Image *in=image_inputs[0]->get(frame);
if (in) {
int ksize=max((ceil(parameters["size"]->value/2.0)*2)+1,1.0);
//nb this doesn't do the intended: create 'continuously variable' blur
cv::GaussianBlur((*in).rgb,image.rgb,cvSize(ksize,ksize),parameters["size"]->value);
return ℑ
}
return nullptr;
}
private:
double size;
};
class VHS: public Image_node {
public:
VHS(){
title="VHS";
description="VHS degradation filter";
create_parameter("generation_loss","number","VHS generation loss amount","Generation loss",1.0);
create_image_input("image input","Image input");
NODEID="3f62bdb0-2d0b-11e3-a4eb-a712839b837d";
};
VHS(map<string,string> &settings):VHS() {
base_settings(settings);
};
~VHS(){
};
VHS* clone(map<string,string> &_settings) { return new VHS(_settings);};
Image *output(const Frame_spec &frame){
Image *in=image_inputs[0]->get(frame);
if (in) {
cvtColor(in->rgb, hsv, CV_RGB2YUV);
vector<cv::Mat> chans;
split(hsv,chans);
int ksize=max((ceil(parameters["generation_loss"]->value/2.0)*2)+1,1.0);
//no blurring in place?
GaussianBlur(chans[2],chans[2],cvSize(ksize,ksize),parameters["generation_loss"]->value);
GaussianBlur(chans[1],chans[1],cvSize(ksize,ksize),parameters["generation_loss"]->value);
//if (ksize>7) GaussianBlur(chans[0],chans[0],cvSize(ksize/4,ksize/4),parameters["generation_loss"]->value/4);
merge(chans,hsv);
cvtColor(hsv, image.rgb, CV_YUV2RGB);
return ℑ
}
return nullptr;
}
private:
double size;
cv::Mat hsv,hsv1;
};
}
#endif
|