Commit e6e03bfd994c11c0d860e06ea04ad155ce6600b8

Authored by Brendan Klare
1 parent 48d184af

Allows a color image to be maintained after landmark extraction

Showing 1 changed file with 7 additions and 4 deletions
openbr/plugins/stasm4.cpp
... ... @@ -75,8 +75,11 @@ class StasmTransform : public UntrainableTransform
75 75  
76 76 void project(const Template &src, Template &dst) const
77 77 {
78   - if (src.m().channels() != 1) qFatal("Stasm expects single channel matrices.");
79   -
  78 + Mat stasmSrc(src);
  79 + if (src.m().channels() == 3)
  80 + cvtColor(src, stasmSrc, CV_BGR2GRAY);
  81 + else if (src.m().channels() != 1)
  82 + qFatal("Stasm expects single channel matrices.");
80 83 dst = src;
81 84  
82 85 StasmCascadeClassifier *stasmCascade = stasmCascadeResource.acquire();
... ... @@ -117,14 +120,14 @@ class StasmTransform : public UntrainableTransform
117 120 else if (i == 39) /*Stasm Left Eye*/ { eyes[2*i] = leftEye.x(); eyes[2*i+1] = leftEye.y(); }
118 121 else { eyes[2*i] = 0; eyes[2*i+1] = 0; }
119 122 }
120   - stasm_search_pinned(landmarks, eyes, reinterpret_cast<const char*>(src.m().data), src.m().cols, src.m().rows, NULL);
  123 + stasm_search_pinned(landmarks, eyes, reinterpret_cast<const char*>(stasmSrc.data), stasmSrc.cols, stasmSrc.rows, NULL);
121 124  
122 125 // The ASM in Stasm is guaranteed to converge in this case
123 126 foundFace = 1;
124 127 }
125 128 }
126 129  
127   - if (!foundFace) stasm_search_single(&foundFace, landmarks, reinterpret_cast<const char*>(src.m().data), src.m().cols, src.m().rows, *stasmCascade, NULL, NULL);
  130 + if (!foundFace) stasm_search_single(&foundFace, landmarks, reinterpret_cast<const char*>(stasmSrc.data), stasmSrc.cols, stasmSrc.rows, *stasmCascade, NULL, NULL);
128 131  
129 132 if (stasm3Format) {
130 133 nLandmarks = 76;
... ...