我有一个RGB图像,我将其转换为HSV,我的目标是将不满足特定色相值(100)的每个像素设置为黑色。因此,H = S = V = 0。
我有以下代码:(frame3是HSV Mat图像,色相= 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]值打印到控制台时,我收到了字母,而不是数字..所以我认为问题出在哪里,但我仍然不知道如何解决。
任何帮助将不胜感激!谢谢!
你可以:
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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句