Skip to content

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

@srcejon

Description

@srcejon

For an RGGB Bayer matrix, COLOR_BayerBG2BGR should be used as described here - although most camera vendors describe it as RG, as discussed in opencv/opencv#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);
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions