试图在OpenCV上操纵图像上的饱和度

时间:2014-11-28 03:37:52

标签: c++ opencv

我试图在Opencv中创建一个Lpr算法。我在图像上应用灰度等级的东西;但我还需要对图像应用饱和度,这就是我的问题:

这是代码(我从此页http://hasanaga.info/tag/opencv-saturation/中提取此代码):

void saturation(cv::Mat &img)
{
    Mat imagen;
    cvtColor(img,imagen,CV_RGB2HSV);

    for(int y=0; y<imagen.cols; y++)
    {
        for(int x=0; x<imagen.rows; x++)
        {
            int cur2 = imagen.at<Vec3b>(Point(y,x))[1];
            cur2 += 41;
            if(cur2 < 0) cur2= 0; else if(cur2 > 255) cur2 = 255;
            imagen.at<Vec3b>(Point(y,x))[1] = cur2;
        }
    }

    cvtColor(imagen,img,CV_HSV2RGB);

}

(我改变了一点代码,因为我不需要更改其他参数)

但是当我尝试创建可执行文件时,会发生这种情况:

  

OpenCV错误:断言失败((scn == 3 || scn == 4)&amp;&amp;(depth == CV_8U || depth == CV_32F))在cvtColor中,文件/home/guerrero/opencv2.4.9 /opencv-2.4.9/modules/imgproc/src/color.cpp,第3959行   在抛出&#39; cv :: Exception&#39;的实例后终止调用     what():/ home /guerrero / opencv2.4.9 /opencv-2.4.9 / modules / imgproc / src / color.cpp:3959:错误:(-215)(scn == 3 || scn == 4)&amp; ;&安培;函数cvtColor中的(depth == CV_8U || depth == CV_32F)

我可以知道导致错误的原因吗?

1 个答案:

答案 0 :(得分:1)

通道数或输入深度图像不正确..

src通道应为3或4,深度应为CV_8U或CV_32F

((scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F))