Commit d7538510516f74995885d9803401074af5a48156
1 parent
39c93c18
Added support for more than two matrices in blend
Showing
1 changed file
with
13 additions
and
4 deletions
openbr/plugins/imgproc/blend.cpp
| ... | ... | @@ -29,13 +29,22 @@ namespace br |
| 29 | 29 | class BlendTransform : public UntrainableMetaTransform |
| 30 | 30 | { |
| 31 | 31 | Q_OBJECT |
| 32 | - Q_PROPERTY(float alpha READ get_alpha WRITE set_alpha RESET reset_alpha STORED false) | |
| 33 | - BR_PROPERTY(float, alpha, 0.5) | |
| 32 | + Q_PROPERTY(QList<float> alpha READ get_alpha WRITE set_alpha RESET reset_alpha STORED false) | |
| 33 | + BR_PROPERTY(QList<float>, alpha, QList<float>() << 0.5) | |
| 34 | 34 | |
| 35 | 35 | void project(const Template &src, Template &dst) const |
| 36 | 36 | { |
| 37 | - if (src.size() != 2) qFatal("Expected two source matrices."); | |
| 38 | - addWeighted(src[0], alpha, src[1], 1-alpha, 0, dst); | |
| 37 | + dst.file = src.file; | |
| 38 | + | |
| 39 | + if (src.size() != 2) { | |
| 40 | + dst.m() = Mat::zeros(src.m().rows, src.m().cols, src.m().type()); | |
| 41 | + for (int i=0; i<src.size(); i++) { | |
| 42 | + const float weight = (alpha.size() == src.size()) ? alpha[i] : 1./src.size(); | |
| 43 | + dst.m() += src[i]*weight; | |
| 44 | + } | |
| 45 | + } else { | |
| 46 | + addWeighted(src[0], alpha[0], src[1], 1-alpha[0], 0, dst); | |
| 47 | + } | |
| 39 | 48 | } |
| 40 | 49 | }; |
| 41 | 50 | ... | ... |