【发布时间】:2016-03-07 14:44:13
【问题描述】:
我有一个转换为 HSV 的 RGB 图像,我的目标是将每个不符合特定色调值 (100) 的像素设置为黑色。所以 H = S = V = 0。
我有这段代码:(frame3 是 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] 值打印到控制台时,我得到的是字母而不是数字..所以我认为这表明问题出在哪里,但我仍然不知道如何解决它。
任何帮助将不胜感激!谢谢!
【问题讨论】:
-
您只是将 HSV 值的 复制 值分配为 0,而不是原始值。
-
true,但即使我将其更改为将实际值设置为 0,它也不起作用:(
-
那是因为
val返回一个副本并且不允许修改基础值。要手动执行此操作,您可能希望将operator[]用于Vec3b,因为它会返回一个引用并且可以修改。 -
但是@Miki 下面的回答是一个更好的解决方案。