OpenCV(C ++) - 设置像素的HSV值

时间:2016-03-07 14:44:14

标签: opencv hsv

我有一个转换为HSV的RGB图像,我的目标是将每个不符合某个色调值(100)的像素设置为黑色。所以H = S = V = 0。

我有这个代码:(第3帧是HSV Mat图像,hue = 100)

    for (int i = 0; i<frame3.rows; i++)   
    {
        for (int j = 0; j<frame3.cols; j++)
        {
            Vec3b hsv = frame3.at<Vec3b>(i, j);
            int H = hsv.val[0]; //hue
            int S = hsv.val[1]; //saturation
            int V = hsv.val[2]; //value
            if (H != hue) {
                H = 0;
                S = 0;
                V = 0;
            }

        }
    }
    imshow("Processed Hue", frame3);
}

但是当我跑步时没有任何反应......图像保持不变。 当我尝试将hsv.val [0]值打印到控制台时,我得到的是字母,而不是数字..所以我认为问题出在哪里,但我仍然不知道如何修复它。 / p>

任何帮助将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:3)

你可以:

  • 构建一个mask,其中H通道等于100,无论S,V通道的值(inRange
  • 根据掩码(使用frame3
  • setTo设置为零

类似的东西:

Mat frame3; // CV_8UC3, HSV image

Mat mask;
inRange(frame3, Scalar(100,0,0), Scalar(100, 255, 255), mask);

frame3.setTo(Scalar(0,0,0), mask);

要保留代码结构,您需要修改实际值,而不是值的副本。你可以这样做,保持对值的引用:

 Vec3b& hsv = frame3.at<Vec3b>(i, j);
 if (hsv[0] != hue) {
    hsv[0] = 0;
    hsv[1] = 0;
    hsv[2] = 0;
 }