从 RGBA 到 HLS 的 cvtColor 不会修改任何内容

cvtColor from RGBA to HLS doesn't modify anything

亲爱的, 我是 opencv 的新手,我不知道为什么,当我尝试从 RGBA 转换为 HLS 时,我没有收到任何变化。 更好地解释一下,我之前使用的是 3 通道图像,所以我正在阅读并将其从 RGB 转换为 HLS/whatever 其他... 现在,出于其他目的(我需要访问 alpha 通道),我在 BGR 中读取 - 在 RGBA 中转换,然后通过 cv::Vec4b 处理 RGB 通道。 但是当谈到转换为 HLS 时,我没有收到任何更改。这是我的函数,需要 2 cv::Mat 输入,'src' & 'dst',在 HLS 中转换它们,应用一些值,然后将它们重新转换为 RGBA,代码如下:

    cvtColor(src, src, CV_RGBA2RGB);
    cvtColor(src, src, CV_RGB2HLS);

    cvtColor(dst, dst, CV_RGBA2RGB);
    cvtColor(dst, dst, CV_RGB2HLS);


    for(int i = 0; i < src.rows; i++)
        for(int j = 0; j < src.cols; j++){
            dst.at<cv::Vec3b>(i,j)[0] = cv::saturate_cast<uchar>(src.at<cv::Vec3b>(i,j)[0] + hue);
            dst.at<cv::Vec3b>(i,j)[1] = cv::saturate_cast<uchar>(src.at<cv::Vec3b>(i,j)[1] + luminance);
            dst.at<cv::Vec3b>(i,j)[2] = cv::saturate_cast<uchar>(src.at<cv::Vec3b>(i,j)[2] + saturation);
        }



    cvtColor(dst, dst, CV_HLS2RGB);
    cvtColor(dst, dst, CV_RGB2RGBA);

    cvtColor(src, src, CV_HLS2RGB);
    cvtColor(src, src, CV_RGB2RGBA);

其中色调、亮度、饱和度是一些整数值。 如前所述,仅使用 RGB 就完全没问题。 现在,通过使用 RGBA,它不会改变任何东西。

通过创建一个新的垫子现在可以在 RGBA 中工作:

    cv::Mat hslIN = src.clone();
    cv::Mat hslOUT;
    cv::cvtColor(hslIN, hslIN, CV_RGBA2RGB);

    cv::cvtColor(hslIN, hslIN, CV_RGB2HLS);
    cv::cvtColor(hslIN, hslOUT, CV_RGB2HLS);

    for(int i = 0; i < src.rows; i++)
        for(int j = 0; j < src.cols; j++){
            hslOUT.at<cv::Vec3b>(i,j)[0] = cv::saturate_cast<uchar>(hslIN.at<cv::Vec3b>(i,j)[0] + hue);
            hslOUT.at<cv::Vec3b>(i,j)[1] = cv::saturate_cast<uchar>(hslIN.at<cv::Vec3b>(i,j)[1] + luminance);
            hslOUT.at<cv::Vec3b>(i,j)[2] = cv::saturate_cast<uchar>(hslIN.at<cv::Vec3b>(i,j)[2] + saturation);
        }

    cv::cvtColor(hslOUT, hslOUT, CV_HLS2RGB);
    cv::cvtColor(hslOUT, dst, CV_RGB2RGBA);