OpenCV (C++) - 设置像素的 HSV 值
OpenCV (C++) - Set HSV values of a pixel
我有一个转换为 HSV 的 RGB 图像,我的目标是将不满足特定色调值 (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
)
- 根据掩码(with
setTo
)将frame3
设置为零
类似于:
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;
}
我有一个转换为 HSV 的 RGB 图像,我的目标是将不满足特定色调值 (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
) - 根据掩码(with
setTo
)将frame3
设置为零
类似于:
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;
}