1// This file is part of OpenCV project.
2// It is subject to the license terms in the LICENSE file found in the top-level directory
3// of this distribution and at http://opencv.org/license.html
4
5#include "precomp.hpp"
6#include "opencl_kernels_imgproc.hpp"
7#include "color.hpp"
8
9namespace cv
10{
11
12#ifdef HAVE_OPENCL
13
14static bool ocl_cvtColor( InputArray _src, OutputArray _dst, int code, int dcn )
15{
16 int bidx = swapBlue(code) ? 2 : 0;
17
18 switch (code)
19 {
20 case COLOR_BGR2BGRA: case COLOR_RGB2BGRA: case COLOR_BGRA2BGR:
21 case COLOR_RGBA2BGR: case COLOR_RGB2BGR: case COLOR_BGRA2RGBA:
22 {
23 bool reverse = !(code == COLOR_BGR2BGRA || code == COLOR_BGRA2BGR);
24 return oclCvtColorBGR2BGR(_src, _dst, dcn, reverse);
25 }
26 case COLOR_BGR5652BGR: case COLOR_BGR5552BGR: case COLOR_BGR5652RGB: case COLOR_BGR5552RGB:
27 case COLOR_BGR5652BGRA: case COLOR_BGR5552BGRA: case COLOR_BGR5652RGBA: case COLOR_BGR5552RGBA:
28 return oclCvtColor5x52BGR(_src, _dst, dcn, bidx, gbits: greenBits(code));
29
30 case COLOR_BGR2BGR565: case COLOR_BGR2BGR555: case COLOR_RGB2BGR565: case COLOR_RGB2BGR555:
31 case COLOR_BGRA2BGR565: case COLOR_BGRA2BGR555: case COLOR_RGBA2BGR565: case COLOR_RGBA2BGR555:
32 return oclCvtColorBGR25x5(_src, _dst, bidx, gbits: greenBits(code) );
33
34 case COLOR_BGR5652GRAY: case COLOR_BGR5552GRAY:
35 return oclCvtColor5x52Gray(_src, _dst, gbits: greenBits(code));
36
37 case COLOR_GRAY2BGR565: case COLOR_GRAY2BGR555:
38 return oclCvtColorGray25x5(_src, _dst, gbits: greenBits(code));
39
40 case COLOR_BGR2GRAY: case COLOR_BGRA2GRAY:
41 case COLOR_RGB2GRAY: case COLOR_RGBA2GRAY:
42 return oclCvtColorBGR2Gray(_src, _dst, bidx);
43
44 case COLOR_GRAY2BGR:
45 case COLOR_GRAY2BGRA:
46 return oclCvtColorGray2BGR(_src, _dst, dcn);
47
48 case COLOR_BGR2YUV:
49 case COLOR_RGB2YUV:
50 return oclCvtColorBGR2YUV(_src, _dst, bidx);
51
52 case COLOR_YUV2BGR:
53 case COLOR_YUV2RGB:
54 return oclCvtColorYUV2BGR(_src, _dst, dcn, bidx);
55
56 case COLOR_YUV2RGB_NV12: case COLOR_YUV2BGR_NV12: case COLOR_YUV2RGB_NV21: case COLOR_YUV2BGR_NV21:
57 case COLOR_YUV2RGBA_NV12: case COLOR_YUV2BGRA_NV12: case COLOR_YUV2RGBA_NV21: case COLOR_YUV2BGRA_NV21:
58 {
59 int uidx = code == COLOR_YUV2RGBA_NV21 || code == COLOR_YUV2RGB_NV21 ||
60 code == COLOR_YUV2BGRA_NV21 || code == COLOR_YUV2BGR_NV21 ? 1 : 0;
61 return oclCvtColorTwoPlaneYUV2BGR(_src, _dst, dcn, bidx, uidx);
62 }
63 case COLOR_YUV2BGR_YV12: case COLOR_YUV2RGB_YV12: case COLOR_YUV2BGRA_YV12: case COLOR_YUV2RGBA_YV12:
64 case COLOR_YUV2BGR_IYUV: case COLOR_YUV2RGB_IYUV: case COLOR_YUV2BGRA_IYUV: case COLOR_YUV2RGBA_IYUV:
65 {
66 int uidx = code == COLOR_YUV2BGRA_YV12 || code == COLOR_YUV2BGR_YV12 ||
67 code == COLOR_YUV2RGBA_YV12 || code == COLOR_YUV2RGB_YV12 ? 1 : 0;
68 return oclCvtColorThreePlaneYUV2BGR(_src, _dst, dcn, bidx, uidx);
69 }
70 case COLOR_YUV2GRAY_420:
71 {
72 return oclCvtColorYUV2Gray_420(_src, _dst);
73 }
74 case COLOR_RGB2YUV_YV12: case COLOR_BGR2YUV_YV12: case COLOR_RGBA2YUV_YV12: case COLOR_BGRA2YUV_YV12:
75 case COLOR_RGB2YUV_IYUV: case COLOR_BGR2YUV_IYUV: case COLOR_RGBA2YUV_IYUV: case COLOR_BGRA2YUV_IYUV:
76 {
77 int uidx = code == COLOR_RGBA2YUV_YV12 || code == COLOR_RGB2YUV_YV12 ||
78 code == COLOR_BGRA2YUV_YV12 || code == COLOR_BGR2YUV_YV12 ? 1 : 0;
79 return oclCvtColorBGR2ThreePlaneYUV(_src, _dst, bidx, uidx );
80 }
81 case COLOR_YUV2RGB_UYVY: case COLOR_YUV2BGR_UYVY: case COLOR_YUV2RGBA_UYVY: case COLOR_YUV2BGRA_UYVY:
82 case COLOR_YUV2RGB_YUY2: case COLOR_YUV2BGR_YUY2: case COLOR_YUV2RGB_YVYU: case COLOR_YUV2BGR_YVYU:
83 case COLOR_YUV2RGBA_YUY2: case COLOR_YUV2BGRA_YUY2: case COLOR_YUV2RGBA_YVYU: case COLOR_YUV2BGRA_YVYU:
84 {
85 int yidx = (code==COLOR_YUV2RGB_UYVY || code==COLOR_YUV2RGBA_UYVY ||
86 code==COLOR_YUV2BGR_UYVY || code==COLOR_YUV2BGRA_UYVY) ? 1 : 0;
87 int uidx = (code==COLOR_YUV2RGB_YVYU || code==COLOR_YUV2RGBA_YVYU ||
88 code==COLOR_YUV2BGR_YVYU || code==COLOR_YUV2BGRA_YVYU) ? 2 : 0;
89 uidx = 1 - yidx + uidx;
90
91 return oclCvtColorOnePlaneYUV2BGR(_src, _dst, dcn, bidx, uidx, yidx);
92 }
93 case COLOR_RGB2YUV_UYVY: case COLOR_BGR2YUV_UYVY: case COLOR_RGBA2YUV_UYVY: case COLOR_BGRA2YUV_UYVY:
94 case COLOR_RGB2YUV_YUY2: case COLOR_BGR2YUV_YUY2: case COLOR_RGB2YUV_YVYU: case COLOR_BGR2YUV_YVYU:
95 case COLOR_RGBA2YUV_YUY2: case COLOR_BGRA2YUV_YUY2: case COLOR_RGBA2YUV_YVYU: case COLOR_BGRA2YUV_YVYU:
96 {
97 int yidx = (code==COLOR_RGB2YUV_UYVY || code==COLOR_RGBA2YUV_UYVY ||
98 code==COLOR_BGR2YUV_UYVY || code==COLOR_BGRA2YUV_UYVY) ? 1 : 0;
99 int uidx = (code==COLOR_RGB2YUV_YVYU || code==COLOR_RGBA2YUV_YVYU ||
100 code==COLOR_BGR2YUV_YVYU || code==COLOR_BGRA2YUV_YVYU) ? 2 : 0;
101 uidx = 1 - yidx + uidx;
102
103 bool res = oclCvtColorOnePlaneBGR2YUV(_src, _dst, dcn, bidx, uidx, yidx);
104
105 return res;
106 }
107 case COLOR_BGR2YCrCb:
108 case COLOR_RGB2YCrCb:
109 return oclCvtColorBGR2YCrCb(_src, _dst, bidx);
110
111 case COLOR_YCrCb2BGR:
112 case COLOR_YCrCb2RGB:
113 return oclCvtcolorYCrCb2BGR(_src, _dst, dcn, bidx);
114
115 case COLOR_BGR2XYZ:
116 case COLOR_RGB2XYZ:
117 return oclCvtColorBGR2XYZ(_src, _dst, bidx);
118
119 case COLOR_XYZ2BGR:
120 case COLOR_XYZ2RGB:
121 return oclCvtColorXYZ2BGR(_src, _dst, dcn, bidx);
122
123 case COLOR_BGR2HSV: case COLOR_BGR2HSV_FULL:
124 case COLOR_RGB2HSV: case COLOR_RGB2HSV_FULL:
125 return oclCvtColorBGR2HSV(_src, _dst, bidx, full: isFullRangeHSV(code));
126
127 case COLOR_BGR2HLS: case COLOR_BGR2HLS_FULL:
128 case COLOR_RGB2HLS: case COLOR_RGB2HLS_FULL:
129 return oclCvtColorBGR2HLS(_src, _dst, bidx, full: isFullRangeHSV(code));
130
131 case COLOR_HSV2BGR: case COLOR_HSV2BGR_FULL:
132 case COLOR_HSV2RGB: case COLOR_HSV2RGB_FULL:
133 return oclCvtColorHSV2BGR(_src, _dst, dcn, bidx, full: isFullRangeHSV(code));
134
135 case COLOR_HLS2BGR: case COLOR_HLS2BGR_FULL:
136 case COLOR_HLS2RGB: case COLOR_HLS2RGB_FULL:
137 return oclCvtColorHLS2BGR(_src, _dst, dcn, bidx, full: isFullRangeHSV(code));
138
139 case COLOR_RGBA2mRGBA:
140 return oclCvtColorRGBA2mRGBA(_src, _dst);
141
142 case COLOR_mRGBA2RGBA:
143 return oclCvtColormRGBA2RGBA(_src, _dst);
144
145 case COLOR_BGR2Lab: case COLOR_LBGR2Lab:
146 case COLOR_RGB2Lab: case COLOR_LRGB2Lab:
147 return oclCvtColorBGR2Lab(_src, _dst, bidx, srgb: is_sRGB(code));
148
149 case COLOR_BGR2Luv: case COLOR_LBGR2Luv:
150 case COLOR_RGB2Luv: case COLOR_LRGB2Luv:
151 return oclCvtColorBGR2Luv(_src, _dst, bidx, srgb: is_sRGB(code));
152
153 case COLOR_Lab2BGR: case COLOR_Lab2LBGR:
154 case COLOR_Lab2RGB: case COLOR_Lab2LRGB:
155 return oclCvtColorLab2BGR(_src, _dst, dcn, bidx, srgb: is_sRGB(code));
156
157 case COLOR_Luv2BGR: case COLOR_Luv2LBGR:
158 case COLOR_Luv2RGB: case COLOR_Luv2LRGB:
159 return oclCvtColorLuv2BGR(_src, _dst, dcn, bidx, srgb: is_sRGB(code));
160
161 default:
162 return false;
163 }
164}
165
166#endif
167
168
169// helper function for dual-plane modes
170
171void cvtColorTwoPlane( InputArray _ysrc, InputArray _uvsrc, OutputArray _dst, int code, AlgorithmHint hint )
172{
173 // only YUV420 is currently supported
174 switch (code)
175 {
176 case COLOR_YUV2BGR_NV21: case COLOR_YUV2RGB_NV21: case COLOR_YUV2BGR_NV12: case COLOR_YUV2RGB_NV12:
177 case COLOR_YUV2BGRA_NV21: case COLOR_YUV2RGBA_NV21: case COLOR_YUV2BGRA_NV12: case COLOR_YUV2RGBA_NV12:
178 break;
179 default:
180 CV_Error( cv::Error::StsBadFlag, "Unknown/unsupported color conversion code" );
181 return;
182 }
183
184 cvtColorTwoPlaneYUV2BGRpair(_ysrc, _uvsrc, _dst, hint, dcn: dstChannels(code), swapb: swapBlue(code), uidx: uIndex(code));
185}
186
187
188//////////////////////////////////////////////////////////////////////////////////////////
189// The main function //
190//////////////////////////////////////////////////////////////////////////////////////////
191
192void cvtColor( InputArray _src, OutputArray _dst, int code, int dcn, AlgorithmHint hint)
193{
194 CV_INSTRUMENT_REGION();
195
196 if (hint == cv::ALGO_HINT_DEFAULT)
197 hint = cv::getDefaultAlgorithmHint();
198
199 CV_Assert(!_src.empty());
200
201 if(dcn <= 0)
202 dcn = dstChannels(code);
203
204 CV_OCL_RUN( _src.dims() <= 2 && _dst.isUMat() &&
205 !(CV_MAT_DEPTH(_src.type()) == CV_8U && (code == COLOR_Luv2BGR || code == COLOR_Luv2RGB)),
206 ocl_cvtColor(_src, _dst, code, dcn) )
207
208 switch( code )
209 {
210 case COLOR_BGR2BGRA: case COLOR_RGB2BGRA: case COLOR_BGRA2BGR:
211 case COLOR_RGBA2BGR: case COLOR_RGB2BGR: case COLOR_BGRA2RGBA:
212 if(_src.channels() == 1)
213 cvtColorGray2BGR(_src, _dst, dcn);
214 else
215 cvtColorBGR2BGR(_src, _dst, dcn, swapb: swapBlue(code));
216 break;
217
218 case COLOR_BGR2BGR565: case COLOR_BGR2BGR555: case COLOR_BGRA2BGR565: case COLOR_BGRA2BGR555:
219 case COLOR_RGB2BGR565: case COLOR_RGB2BGR555: case COLOR_RGBA2BGR565: case COLOR_RGBA2BGR555:
220 cvtColorBGR25x5(_src, _dst, swapb: swapBlue(code), gbits: greenBits(code));
221 break;
222
223 case COLOR_BGR5652BGR: case COLOR_BGR5552BGR: case COLOR_BGR5652BGRA: case COLOR_BGR5552BGRA:
224 case COLOR_BGR5652RGB: case COLOR_BGR5552RGB: case COLOR_BGR5652RGBA: case COLOR_BGR5552RGBA:
225 cvtColor5x52BGR(_src, _dst, dcn, swapb: swapBlue(code), gbits: greenBits(code));
226 break;
227
228 case COLOR_BGR2GRAY: case COLOR_BGRA2GRAY:
229 case COLOR_RGB2GRAY: case COLOR_RGBA2GRAY:
230 cvtColorBGR2Gray(_src, _dst, swapb: swapBlue(code));
231 break;
232
233 case COLOR_BGR5652GRAY:
234 case COLOR_BGR5552GRAY:
235 cvtColor5x52Gray(_src, _dst, gbits: greenBits(code));
236 break;
237
238 case COLOR_GRAY2BGR:
239 case COLOR_GRAY2BGRA:
240 cvtColorGray2BGR(_src, _dst, dcn);
241 break;
242
243 case COLOR_GRAY2BGR565:
244 case COLOR_GRAY2BGR555:
245 cvtColorGray25x5(_src, _dst, gbits: greenBits(code));
246 break;
247
248 case COLOR_BGR2YCrCb: case COLOR_RGB2YCrCb:
249 case COLOR_BGR2YUV: case COLOR_RGB2YUV:
250 cvtColorBGR2YUV(_src, _dst, hint, swapb: swapBlue(code), crcb: code == COLOR_BGR2YCrCb || code == COLOR_RGB2YCrCb);
251 break;
252
253 case COLOR_YCrCb2BGR: case COLOR_YCrCb2RGB:
254 case COLOR_YUV2BGR: case COLOR_YUV2RGB:
255 cvtColorYUV2BGR(_src, _dst, hint, dcn, swapb: swapBlue(code), crcb: code == COLOR_YCrCb2BGR || code == COLOR_YCrCb2RGB);
256 break;
257
258 case COLOR_BGR2XYZ:
259 case COLOR_RGB2XYZ:
260 cvtColorBGR2XYZ(_src, _dst, swapb: swapBlue(code));
261 break;
262
263 case COLOR_XYZ2BGR:
264 case COLOR_XYZ2RGB:
265 cvtColorXYZ2BGR(_src, _dst, dcn, swapb: swapBlue(code));
266 break;
267
268 case COLOR_BGR2HSV: case COLOR_BGR2HSV_FULL:
269 case COLOR_RGB2HSV: case COLOR_RGB2HSV_FULL:
270 cvtColorBGR2HSV(_src, _dst, swapb: swapBlue(code), fullRange: isFullRangeHSV(code));
271 break;
272
273 case COLOR_BGR2HLS: case COLOR_BGR2HLS_FULL:
274 case COLOR_RGB2HLS: case COLOR_RGB2HLS_FULL:
275 cvtColorBGR2HLS(_src, _dst, swapb: swapBlue(code), fullRange: isFullRangeHSV(code));
276 break;
277
278 case COLOR_HSV2BGR: case COLOR_HSV2BGR_FULL:
279 case COLOR_HSV2RGB: case COLOR_HSV2RGB_FULL:
280 cvtColorHSV2BGR(_src, _dst, dcn, swapb: swapBlue(code), fullRange: isFullRangeHSV(code));
281 break;
282
283 case COLOR_HLS2BGR: case COLOR_HLS2BGR_FULL:
284 case COLOR_HLS2RGB: case COLOR_HLS2RGB_FULL:
285 cvtColorHLS2BGR(_src, _dst, dcn, swapb: swapBlue(code), fullRange: isFullRangeHSV(code));
286 break;
287
288 case COLOR_BGR2Lab: case COLOR_LBGR2Lab:
289 case COLOR_RGB2Lab: case COLOR_LRGB2Lab:
290 cvtColorBGR2Lab(_src, _dst, swapb: swapBlue(code), srgb: is_sRGB(code));
291 break;
292
293 case COLOR_BGR2Luv: case COLOR_LBGR2Luv:
294 case COLOR_RGB2Luv: case COLOR_LRGB2Luv:
295 cvtColorBGR2Luv(_src, _dst, swapb: swapBlue(code), srgb: is_sRGB(code));
296 break;
297
298 case COLOR_Lab2BGR: case COLOR_Lab2LBGR:
299 case COLOR_Lab2RGB: case COLOR_Lab2LRGB:
300 cvtColorLab2BGR(_src, _dst, dcn, swapb: swapBlue(code), srgb: is_sRGB(code));
301 break;
302
303 case COLOR_Luv2BGR: case COLOR_Luv2LBGR:
304 case COLOR_Luv2RGB: case COLOR_Luv2LRGB:
305 cvtColorLuv2BGR(_src, _dst, dcn, swapb: swapBlue(code), srgb: is_sRGB(code));
306 break;
307
308 case COLOR_BayerBG2GRAY: case COLOR_BayerGB2GRAY: case COLOR_BayerRG2GRAY: case COLOR_BayerGR2GRAY:
309 case COLOR_BayerBG2BGR: case COLOR_BayerGB2BGR: case COLOR_BayerRG2BGR: case COLOR_BayerGR2BGR:
310 case COLOR_BayerBG2BGR_VNG: case COLOR_BayerGB2BGR_VNG: case COLOR_BayerRG2BGR_VNG: case COLOR_BayerGR2BGR_VNG:
311 case COLOR_BayerBG2BGR_EA: case COLOR_BayerGB2BGR_EA: case COLOR_BayerRG2BGR_EA: case COLOR_BayerGR2BGR_EA:
312 case COLOR_BayerBG2BGRA: case COLOR_BayerGB2BGRA: case COLOR_BayerRG2BGRA: case COLOR_BayerGR2BGRA:
313 {
314 Mat src;
315 if (_src.getObj() == _dst.getObj()) // inplace processing (#6653)
316 _src.copyTo(arr: src);
317 else
318 src = _src.getMat();
319 demosaicing(src, dst: _dst, code, dstCn: dcn);
320 break;
321 }
322
323 case COLOR_YUV2BGR_NV21: case COLOR_YUV2RGB_NV21: case COLOR_YUV2BGR_NV12: case COLOR_YUV2RGB_NV12:
324 case COLOR_YUV2BGRA_NV21: case COLOR_YUV2RGBA_NV21: case COLOR_YUV2BGRA_NV12: case COLOR_YUV2RGBA_NV12:
325 // http://www.fourcc.org/yuv.php#NV21 == yuv420sp -> a plane of 8 bit Y samples followed by an interleaved V/U plane containing 8 bit 2x2 subsampled chroma samples
326 // http://www.fourcc.org/yuv.php#NV12 -> a plane of 8 bit Y samples followed by an interleaved U/V plane containing 8 bit 2x2 subsampled colour difference samples
327 cvtColorTwoPlaneYUV2BGR(_src, _dst, hint, dcn, swapb: swapBlue(code), uidx: uIndex(code));
328 break;
329
330 case COLOR_YUV2BGR_YV12: case COLOR_YUV2RGB_YV12: case COLOR_YUV2BGRA_YV12: case COLOR_YUV2RGBA_YV12:
331 case COLOR_YUV2BGR_IYUV: case COLOR_YUV2RGB_IYUV: case COLOR_YUV2BGRA_IYUV: case COLOR_YUV2RGBA_IYUV:
332 //http://www.fourcc.org/yuv.php#YV12 == yuv420p -> It comprises an NxM Y plane followed by (N/2)x(M/2) V and U planes.
333 //http://www.fourcc.org/yuv.php#IYUV == I420 -> It comprises an NxN Y plane followed by (N/2)x(N/2) U and V planes
334 cvtColorThreePlaneYUV2BGR(_src, _dst, hint, dcn, swapb: swapBlue(code), uidx: uIndex(code));
335 break;
336
337 case COLOR_YUV2GRAY_420:
338 cvtColorYUV2Gray_420(_src, _dst);
339 break;
340
341 case COLOR_RGB2YUV_YV12: case COLOR_BGR2YUV_YV12: case COLOR_RGBA2YUV_YV12: case COLOR_BGRA2YUV_YV12:
342 case COLOR_RGB2YUV_IYUV: case COLOR_BGR2YUV_IYUV: case COLOR_RGBA2YUV_IYUV: case COLOR_BGRA2YUV_IYUV:
343 cvtColorBGR2ThreePlaneYUV(_src, _dst, hint, swapb: swapBlue(code), uidx: uIndex(code));
344 break;
345
346 case COLOR_YUV2RGB_UYVY: case COLOR_YUV2BGR_UYVY: case COLOR_YUV2RGBA_UYVY: case COLOR_YUV2BGRA_UYVY:
347 case COLOR_YUV2RGB_YUY2: case COLOR_YUV2BGR_YUY2: case COLOR_YUV2RGB_YVYU: case COLOR_YUV2BGR_YVYU:
348 case COLOR_YUV2RGBA_YUY2: case COLOR_YUV2BGRA_YUY2: case COLOR_YUV2RGBA_YVYU: case COLOR_YUV2BGRA_YVYU:
349 //http://www.fourcc.org/yuv.php#UYVY
350 //http://www.fourcc.org/yuv.php#YUY2
351 //http://www.fourcc.org/yuv.php#YVYU
352 {
353 int ycn = (code==COLOR_YUV2RGB_UYVY || code==COLOR_YUV2BGR_UYVY ||
354 code==COLOR_YUV2RGBA_UYVY || code==COLOR_YUV2BGRA_UYVY) ? 1 : 0;
355 cvtColorOnePlaneYUV2BGR(_src, _dst, hint, dcn, swapb: swapBlue(code), uidx: uIndex(code), ycn);
356 break;
357 }
358
359 case COLOR_RGB2YUV_UYVY: case COLOR_BGR2YUV_UYVY: case COLOR_RGBA2YUV_UYVY: case COLOR_BGRA2YUV_UYVY:
360 case COLOR_RGB2YUV_YUY2: case COLOR_BGR2YUV_YUY2: case COLOR_RGB2YUV_YVYU: case COLOR_BGR2YUV_YVYU:
361 case COLOR_RGBA2YUV_YUY2: case COLOR_BGRA2YUV_YUY2: case COLOR_RGBA2YUV_YVYU: case COLOR_BGRA2YUV_YVYU:
362 //http://www.fourcc.org/yuv.php#UYVY
363 //http://www.fourcc.org/yuv.php#YUY2
364 //http://www.fourcc.org/yuv.php#YVYU
365 {
366 int ycn = (code==COLOR_RGB2YUV_UYVY || code==COLOR_BGR2YUV_UYVY ||
367 code==COLOR_RGBA2YUV_UYVY || code==COLOR_BGRA2YUV_UYVY) ? 1 : 0;
368 cvtColorOnePlaneBGR2YUV(_src, _dst, hint, swapb: swapBlue(code), uidx: uIndex(code), ycn);
369 break;
370 }
371
372 case COLOR_YUV2GRAY_UYVY:
373 case COLOR_YUV2GRAY_YUY2:
374 cvtColorYUV2Gray_ch(_src, _dst, coi: code == COLOR_YUV2GRAY_UYVY ? 1 : 0);
375 break;
376
377 case COLOR_RGBA2mRGBA:
378 cvtColorRGBA2mRGBA(_src, _dst);
379 break;
380
381 case COLOR_mRGBA2RGBA:
382 cvtColormRGBA2RGBA(_src, _dst);
383 break;
384 default:
385 CV_Error( cv::Error::StsBadFlag, "Unknown/unsupported color conversion code" );
386 }
387}
388} //namespace cv
389
390#ifndef OPENCV_EXCLUDE_C_API
391
392CV_IMPL void
393cvCvtColor( const CvArr* srcarr, CvArr* dstarr, int code )
394{
395 cv::Mat src = cv::cvarrToMat(arr: srcarr), dst0 = cv::cvarrToMat(arr: dstarr), dst = dst0;
396 CV_Assert( src.depth() == dst.depth() );
397
398 cv::cvtColor(src: src, dst: dst, code, dcn: dst.channels());
399 CV_Assert( dst.data == dst0.data );
400}
401
402#endif
403

Provided by KDAB

Privacy Policy
Improve your Profiling and Debugging skills
Find out more

source code of opencv/modules/imgproc/src/color.cpp