Direct Graphical Models  v.1.7.0
ColorSpaces.h
1 // Color Space Transformation Class
2 // Written by Sergey G. Kosov in 2008 for MPII
3 // Extended by Sergey G. Kosov in 2014 - 2016 for Project X
4 #pragma once
5 
6 #include "types.h"
7 
8 #define DGM_HSV(h, s, v) cv::Scalar(h, s, v, 0 )
9 
10 namespace DirectGraphicalModels { namespace vis
11 {
17  namespace colorspaces {
23  inline cv::Scalar rgb2bgr(cv::Scalar rgb)
24  {
25  cv::Scalar bgr;
26  bgr.val[0] = rgb.val[2];
27  bgr.val[1] = rgb.val[1];
28  bgr.val[2] = rgb.val[0];
29  bgr.val[3] = rgb.val[3];
30  return bgr;
31  }
37  inline cv::Scalar bgr2rgb(cv::Scalar bgr) { return rgb2bgr(bgr); }
44  inline cv::Scalar hsv2bgr(cv::Scalar hsv)
45  {
46  double hh, p, q, t, ff;
47  long i;
48  cv::Scalar out;
49 
50  if (hsv.val[1] <= 0.0) { // < is bogus, just shuts up warnings
51  out.val[0] = hsv.val[2];
52  out.val[1] = hsv.val[2];
53  out.val[2] = hsv.val[2];
54  return out;
55  }
56  hh = hsv.val[0];
57  if (hh >= 360.0) hh = 0.0;
58  hh /= 60.0;
59  i = (long)hh;
60  ff = hh - i;
61  p = hsv.val[2] * (1.0 - hsv.val[1] / 255.0);
62  q = hsv.val[2] * (1.0 - (hsv.val[1] * ff) / 255.0);
63  t = hsv.val[2] * (1.0 - (hsv.val[1] * (1.0 - ff)) / 255.0);
64 
65  switch (i) {
66  case 0:
67  out.val[0] = hsv.val[2];
68  out.val[1] = t;
69  out.val[2] = p;
70  break;
71  case 1:
72  out.val[0] = q;
73  out.val[1] = hsv.val[2];
74  out.val[2] = p;
75  break;
76  case 2:
77  out.val[0] = p;
78  out.val[1] = hsv.val[2];
79  out.val[2] = t;
80  break;
81 
82  case 3:
83  out.val[0] = p;
84  out.val[1] = q;
85  out.val[2] = hsv.val[2];
86  break;
87  case 4:
88  out.val[0] = t;
89  out.val[1] = p;
90  out.val[2] = hsv.val[2];
91  break;
92  case 5:
93  default:
94  out.val[0] = hsv.val[2];
95  out.val[1] = p;
96  out.val[2] = q;
97  break;
98  }
99  return out;
100  }
107  inline cv::Scalar hsv2rgb(cv::Scalar hsv) { return bgr2rgb(hsv2bgr(hsv)); }
108  }
109 } }
cv::Scalar rgb2bgr(cv::Scalar rgb)
Transforms color from RGB to BGR.
Definition: ColorSpaces.h:23
cv::Scalar bgr2rgb(cv::Scalar bgr)
Transforms color from RGB to BGR.
Definition: ColorSpaces.h:37
cv::Scalar hsv2rgb(cv::Scalar hsv)
Transforms color from HSV to RGB space.
Definition: ColorSpaces.h:107
cv::Scalar hsv2bgr(cv::Scalar hsv)
Transforms color from HSV to BGR space.
Definition: ColorSpaces.h:44