opencv_contrib icon indicating copy to clipboard operation
opencv_contrib copied to clipboard

cv::cuda::demosaicing interprets color code differently to cv::cuda::cvtColor

Open srcejon opened this issue 1 month ago • 0 comments

For an RGGB Bayer matrix, COLOR_BayerBG2BGR should be used as described here - although most camera vendors describe it as RG, as discussed in https://github.com/opencv/opencv/issues/19629

This seems to be a problem in cv::cuda::demosaicing, which interprets the color code differently to cv::cuda::cvtColor.

For cv::cuda::cvtColor COLOR_BayerBG2BGR works as documented, but COLOR_BayerRG2BGR needs to be used for cv::cuda::demosaicing.

Image

Problem appears to be in cudaimgproc\src\color.cpp

void bayer_to_BGR(InputArray _src, OutputArray _dst, int dcn, bool blue_last, bool start_with_green, Stream& stream)

cv::cuda::demosaicing()
     ...
    bayer_to_BGR(_src, _dst, dcn, code == cv::COLOR_BayerBG2BGR || code == cv::COLOR_BayerGB2BGR, code == cv::COLOR_BayerGB2BGR || code == cv::COLOR_BayerGR2BGR, stream);

blue_last is set to true for COLOR_BayerBG2BGR.

However, in the code used by cvtColor, this is set to false.

void bayerBG_to_BGR(InputArray src, OutputArray dst, int dcn, Stream& stream)
{
    bayer_to_BGR(src, dst, dcn, false, false, stream);
}

srcejon avatar Oct 15 '25 14:10 srcejon