Commit c73a56235aeae36267302cb4aadf8a94ece5e63e
1 parent
ce11fbba
generalized EqualizeHist to 3 channels
Showing
1 changed file
with
16 additions
and
1 deletions
openbr/plugins/imgproc/equalizehist.cpp
| ... | ... | @@ -18,6 +18,8 @@ |
| 18 | 18 | |
| 19 | 19 | #include <openbr/plugins/openbr_internal.h> |
| 20 | 20 | |
| 21 | +using namespace cv; | |
| 22 | + | |
| 21 | 23 | namespace br |
| 22 | 24 | { |
| 23 | 25 | |
| ... | ... | @@ -32,7 +34,20 @@ class EqualizeHistTransform : public UntrainableTransform |
| 32 | 34 | |
| 33 | 35 | void project(const Template &src, Template &dst) const |
| 34 | 36 | { |
| 35 | - cv::equalizeHist(src, dst); | |
| 37 | + if (src.m().channels() == 1) { | |
| 38 | + equalizeHist(src, dst); | |
| 39 | + } else if (src.m().channels() == 3) { | |
| 40 | + // http://stackoverflow.com/questions/15007304/histogram-equalization-not-working-on-color-image-opencv | |
| 41 | + Mat ycrcb; | |
| 42 | + cvtColor(src, ycrcb, CV_BGR2YCrCb); | |
| 43 | + vector<Mat> channels; | |
| 44 | + split(ycrcb, channels); | |
| 45 | + equalizeHist(channels[0], channels[0]); | |
| 46 | + merge(channels, ycrcb); | |
| 47 | + cvtColor(ycrcb, dst, CV_YCrCb2BGR); | |
| 48 | + } else { | |
| 49 | + qFatal("Invalid channel count!"); | |
| 50 | + } | |
| 36 | 51 | } |
| 37 | 52 | }; |
| 38 | 53 | ... | ... |