gpt4 book ai didi

python - OpenCV颜色识别

转载 作者:太空宇宙 更新时间:2023-11-03 21:18:00 26 4
gpt4 key购买 nike

您好,我正在尝试构建简单的颜色识别程序。我拍摄了一张图像(黄色和粉色)并将其转换为 HSV 颜色空间。然后使用阈值来识别黄色区域。我得到输出(黑色图像)。我希望黄色区域用白色填充,其余部分用黑色填充。


enter image description here enter image description here


IplImage *imgRead= cvLoadImage("yellow.jpeg",CV_LOAD_IMAGE_COLOR);
if(!imgRead) {
fprintf(stderr, "Error in reading image\n");
exit(1);
}
IplImage *imgHsv = cvCreateImage(cvGetSize(imgRead),8, 3);
cvCvtColor(imgRead, imgHsv,CV_BGR2HSV);

IplImage *imgThreshold = cvCreateImage(cvGetSize(imgRead),8, 1);
cvInRangeS(imgHsv, cvScalar(25, 80, 80,80), cvScalar(34, 255, 255,255), imgThreshold);
cvShowImage("image",imgThreshold);
cvWaitKey(0);

在上面的代码中,我计算出黄色的 HSV 值为 30。(在 gimp 中,黄色的 hsv 值为 60)。在 cvInRangeS 中,除了 hue 值,我不确定如何为 cvScalar 指定其他值。

我需要输入什么值?我错过了什么吗?

最佳答案

我认为您遇到的问题是由于 HSV 数据缩放以适应 8 位。通常,正如我确定您在使用 GIMP 时注意到的那样,HSV 比例如下:

H -> [0, 360]
S -> [0, 100]
V -> [0, 100]

但是,OpenCV 按如下方式重新映射这些值:

(H / 2) -> [0, 180] (so that the H values can be stored in 8-bits)
S -> [0, 255]
V -> [0, 255]

这就是为什么您计算出的 Hue 值为 30 而不是 60。因此,要过滤掉黄色以外的所有颜色,您的 cvInRangeS 调用将如下所示:

cvInRangeS(imgHsv, cvScalar(25, 245, 245, 0), cvScalar(35, 255, 255, 255), imgThreshold);

第四个 channel 未用于 HSV。此调用将为您提供颜色检测器阈值中每个维度的 10 次噪声计数。

如 SSteve 所述,您的阈值应该有效,但您可能需要扩大阈值边界以捕获图像中的黄色。

希望对您有所帮助!

关于python - OpenCV颜色识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7950744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com