49 #ifndef vpIMAGECONVERT_H
50 #define vpIMAGECONVERT_H
53 #include <visp/vpConfig.h>
54 #include <visp/vpImage.h>
55 #include <visp/vpDebug.h>
57 #include <visp/vpRGBa.h>
59 #ifdef VISP_HAVE_OPENCV
60 # if (VISP_HAVE_OPENCV_VERSION >= 0x020101) // Require opencv >= 2.1.1
61 # include <opencv2/core/core.hpp>
62 # include <opencv2/legacy/legacy.hpp>
63 # include <opencv2/highgui/highgui.hpp>
64 # include <opencv2/highgui/highgui_c.h>
71 # include <yarp/sig/Image.h>
78 #if defined(VISP_HAVE_LIBJPEG)
83 #if defined(VISP_HAVE_LIBPNG)
114 #ifdef VISP_HAVE_OPENCV
115 static void convert(
const IplImage* src,
117 static void convert(
const IplImage* src,
123 #if VISP_HAVE_OPENCV_VERSION >= 0x020100
124 static void convert(
const cv::Mat& src,
126 static void convert(
const cv::Mat& src,
131 cv::Mat& dest,
const bool copyData =
true) ;
135 #ifdef VISP_HAVE_YARP
137 yarp::sig::ImageOf< yarp::sig::PixelMono > *dest,
const bool copyData =
true) ;
138 static void convert(
const yarp::sig::ImageOf< yarp::sig::PixelMono > *src,
143 yarp::sig::ImageOf< yarp::sig::PixelRgba > *dest,
const bool copyData =
true) ;
144 static void convert(
const yarp::sig::ImageOf< yarp::sig::PixelRgba > *src,
148 yarp::sig::ImageOf< yarp::sig::PixelRgb > *dest) ;
149 static void convert(
const yarp::sig::ImageOf< yarp::sig::PixelRgb > *src,
153 #ifdef VISP_HAVE_LIBJPEG
154 #if JPEG_LIB_VERSION > 70
156 unsigned char **dest,
long unsigned int &destSize,
unsigned int quality = 100);
158 static void convertToJPEGBuffer(
unsigned char *src,
long unsigned int srcSize,
194 dr = floor(0.9999695*y - 0.0009508*(u-128) + 1.1359061*(v-128));
195 dg = floor(0.9999695*y - 0.3959609*(u-128) - 0.5782955*(v-128));
196 db = floor(0.9999695*y + 2.04112*(u-128) - 0.0016314*(v-128));
198 dr = dr < 0. ? 0. : dr;
199 dg = dg < 0. ? 0. : dg;
200 db = db < 0. ? 0. : db;
201 dr = dr > 255. ? 255. : dr;
202 dg = dg > 255. ? 255. : dg;
203 db = db > 255. ? 255. : db;
205 r = (
unsigned char) dr;
206 g = (
unsigned char) dg;
207 b = (
unsigned char) db;
209 static void YUYVToRGBa(
unsigned char* yuyv,
unsigned char* rgba,
210 unsigned int width,
unsigned int height);
211 static void YUYVToRGB(
unsigned char* yuyv,
unsigned char* rgb,
212 unsigned int width,
unsigned int height);
213 static void YUYVToGrey(
unsigned char* yuyv,
unsigned char* grey,
215 static void YUV411ToRGBa(
unsigned char* yuv,
216 unsigned char* rgba,
unsigned int size);
217 static void YUV411ToRGB(
unsigned char* yuv,
218 unsigned char* rgb,
unsigned int size);
219 static void YUV411ToGrey(
unsigned char* yuv,
220 unsigned char* grey,
unsigned int size);
221 static void YUV422ToRGBa(
unsigned char* yuv,
222 unsigned char* rgba,
unsigned int size);
223 static void YUV422ToRGB(
unsigned char* yuv,
224 unsigned char* rgb,
unsigned int size);
225 static void YUV422ToGrey(
unsigned char* yuv,
226 unsigned char* grey,
unsigned int size);
227 static void YUV420ToRGBa(
unsigned char* yuv,
228 unsigned char* rgba,
unsigned int width,
unsigned int height);
229 static void YUV420ToRGB(
unsigned char* yuv,
230 unsigned char* rgb,
unsigned int width,
unsigned int height);
231 static void YUV420ToGrey(
unsigned char* yuv,
232 unsigned char* grey,
unsigned int size);
234 static void YUV444ToRGBa(
unsigned char* yuv,
235 unsigned char* rgba,
unsigned int size);
236 static void YUV444ToRGB(
unsigned char* yuv,
237 unsigned char* rgb,
unsigned int size);
238 static void YUV444ToGrey(
unsigned char* yuv,
239 unsigned char* grey,
unsigned int size);
241 static void YV12ToRGBa(
unsigned char* yuv,
242 unsigned char* rgba,
unsigned int width,
unsigned int height);
243 static void YV12ToRGB(
unsigned char* yuv,
244 unsigned char* rgb,
unsigned int width,
unsigned int height);
245 static void YVU9ToRGBa(
unsigned char* yuv,
246 unsigned char* rgba,
unsigned int width,
unsigned int height);
247 static void YVU9ToRGB(
unsigned char* yuv,
248 unsigned char* rgb,
unsigned int width,
unsigned int height);
249 static void RGBToRGBa(
unsigned char* rgb,
250 unsigned char* rgba,
unsigned int size);
251 static void RGBaToRGB(
unsigned char* rgba,
252 unsigned char* rgb,
unsigned int size);
254 static void RGBToGrey(
unsigned char* rgb,
255 unsigned char* grey,
unsigned int size);
256 static void RGBaToGrey(
unsigned char* rgba,
257 unsigned char* grey,
unsigned int size);
259 static void RGBToRGBa(
unsigned char * bgr,
unsigned char * rgba,
260 unsigned int width,
unsigned int height,
bool flip =
false);
261 static void RGBToGrey(
unsigned char * bgr,
unsigned char * grey,
262 unsigned int width,
unsigned int height,
bool flip =
false);
264 static void GreyToRGBa(
unsigned char* grey,
265 unsigned char* rgba,
unsigned int size);
266 static void GreyToRGB(
unsigned char* grey,
267 unsigned char* rgb,
unsigned int size);
269 static void BGRToRGBa(
unsigned char * bgr,
unsigned char * rgba,
270 unsigned int width,
unsigned int height,
bool flip);
272 static void BGRToGrey(
unsigned char * bgr,
unsigned char * grey,
273 unsigned int width,
unsigned int height,
bool flip);
275 static void YCbCrToRGB(
unsigned char *ycbcr,
unsigned char *rgb,
277 static void YCbCrToRGBa (
unsigned char *ycbcr,
unsigned char *rgb,
279 static void YCrCbToRGB(
unsigned char *ycbcr,
unsigned char *rgb,
281 static void YCrCbToRGBa(
unsigned char *ycbcr,
unsigned char *rgb,
283 static void YCbCrToGrey(
unsigned char *ycbcr,
unsigned char *grey,
285 static void MONO16ToGrey(
unsigned char *grey16,
unsigned char *grey,
287 static void MONO16ToRGBa(
unsigned char *grey16,
unsigned char *rgba,
291 static void computeYCbCrLUT();
294 static bool YCbCrLUTcomputed;
295 static int vpCrr[256];
296 static int vpCgb[256];
297 static int vpCgr[256];
298 static int vpCbb[256];
static void YUVToRGB(unsigned char y, unsigned char u, unsigned char v, unsigned char &r, unsigned char &g, unsigned char &b)