从RGBA到HLS的cvtColor不会进行任何修改

时间:2019-07-18 22:20:35

标签: c++ image opencv image-processing opencv3.0

亲爱的, 我是opencv的新手,我不知道为什么,当我尝试从RGBA转换为HLS时,没有任何变化。 更好的解释是,我以前使用的是3通道图像,所以我正在读取RGB并将其转换为HLS /其他... 现在,出于其他目的(我需要访问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,它什么都不会改变。

1 个答案:

答案 0 :(得分:0)

通过创建一个新的Mat现在可以在RGBA中使用

False