Commit d377e6d627661724549f530e44934b38f224c261

Authored by Josh Klontz
1 parent 04037199

Generalized Cat transform

Showing 1 changed file with 17 additions and 13 deletions
sdk/plugins/regions.cpp
@@ -79,23 +79,27 @@ BR_REGISTER(Transform, ByRow) @@ -79,23 +79,27 @@ BR_REGISTER(Transform, ByRow)
79 class Cat : public UntrainableMetaTransform 79 class Cat : public UntrainableMetaTransform
80 { 80 {
81 Q_OBJECT 81 Q_OBJECT
  82 + Q_PROPERTY(int partitions READ get_partitions WRITE set_partitions RESET reset_partitions)
  83 + BR_PROPERTY(int, partitions, 1)
82 84
83 void project(const Template &src, Template &dst) const 85 void project(const Template &src, Template &dst) const
84 { 86 {
85 - int vals = 0;  
86 - foreach (const cv::Mat &m, src)  
87 - vals += m.total() * m.channels();  
88 -  
89 - Mat cat(1, (int)vals, CV_32FC1);  
90 - int offset = 0;  
91 - foreach (const cv::Mat &m, src) {  
92 - size_t size = m.total() * m.elemSize();  
93 - memcpy(&cat.data[offset], m.ptr(), size);  
94 - offset += size;  
95 - }  
96 -  
97 dst.file = src.file; 87 dst.file = src.file;
98 - dst = cat; 88 +
  89 + QVector<int> sizes(partitions, 0);
  90 + for (int i=0; i<src.size(); i++)
  91 + sizes[i%partitions] += src[i].total() * src[i].channels();
  92 +
  93 + foreach (int size, sizes)
  94 + dst.append(Mat(1, size, CV_32FC1));
  95 +
  96 + QVector<int> offsets(partitions, 0);
  97 + for (int i=0; i<src.size(); i++) {
  98 + size_t size = src[i].total() * src[i].elemSize();
  99 + int j = i%partitions;
  100 + memcpy(&dst[j].data[offsets[j]], src[i].ptr(), size);
  101 + offsets[j] += size;
  102 + }
99 } 103 }
100 }; 104 };
101 105