【问题标题】:Trying to manipulate the saturation on a image on OpenCV试图在 OpenCV 上操纵图像的饱和度
【发布时间】:2014-11-28 03:37:51
【问题描述】:

我正在尝试在 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 错误:在 cvtColor,文件 /home/guerrero/opencv2.4.9/opencv- 中断言失败 ((scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F)) 2.4.9/modules/imgproc/src/color.cpp,第 3959 行 在抛出 'cv::Exception' 的实例后调用终止 什么():/home/guerrero/opencv2.4.9/opencv-2.4.9/modules/imgproc/src/color.cpp:3959:错误:(-215)(scn == 3 || scn == 4)&& (depth == CV_8U || depth == CV_32F) 在函数 cvtColor

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

【问题讨论】:

  • 看起来您的图片格式不正确。
  • 尝试检查 2 个转换中的哪一个确实触发了异常,然后检查(查看/打印)其源图像的类型(可以是 imgimagen 取决于哪个调用导致错误。由于cvtColor 通常保留图像类型,因此有根据的猜测是,当您调用saturation() 函数时,img 是空的或单通道。

标签: c++ opencv


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 2014-03-27
    • 1970-01-01
    相关资源
    最近更新 更多