【问题标题】:how to detect color white in ycrcb?如何检测 ycrcb 中的白色?
【发布时间】:2022-06-14 19:21:54
【问题描述】:

我想在 python 中使用 open cv 检测白色对象,但在 ycbcr 中定义下白和上白时遇到问题。我尝试制作程序,但程序没有得到正确的结果来检测对象。这是我的代码:

 ycrcb = cv.cvtColor(rgb, cv.COLOR_BGR2YCrCb)
 lower_white = np.array([205, 128, 128], dtype=np.uint8)
 upper_white = np.array([235, 128, 128], dtype=np.uint8)
 img = cv.inRange(ycrcb, lower_white, upper_white)

我尝试使用结构化元素进行检测并发送到形态学:

se_3 = cv.getStructuringElement(cv.MORPH_RECT,(3,3))
dst_dilate = cv.dilate(img, se_3, iterations = 1)

并使用按位与将其放在一起:

res = cv.bitwise_and(rgb,rgb, mask= dst_dilate)

我尽力了,但结果不正确,我需要你的意见来改变哪个部分以获得更好的结果。

【问题讨论】:

  • 您对 YUV/YCC 空间了解多少?为什么你认为你的上限和下限有意义?
  • 我不是很了解
  • 那么您可能想了解它。 wikipedia 和 opencv 自己的文档都对它进行了一点的讨论。您正在寻找对值范围及其含义的解释。
  • 我说大约 128,不完全是128,甚至图片是什么?只显示图片。
  • 我已经添加了

标签: python opencv image-processing color-space


【解决方案1】:

最简单的方法是加载图像,将其转换为所需的色彩空间,然后拆分通道,将它们并排放置。然后使用您系统的“color-dropper tool”(macOS 上的“Digital Color Meter”)查看您感兴趣的区域中各个通道的值:

import cv2

# Load image
im = cv2.imread('qAK68.jpg')

# Convert to YCrCb colourspace
YCrCb = cv2.cvtColor(im, cv2.COLOR_BGR2YCrCb)

# Split channels and lay out side-by-sise, Y on the left, Cr then Cb on the right
Y, Cr, Cb = cv2.split(YCrCb)
hstack = np.hstack((Y,Cr,Cb))

您应该看到您大致需要以下范围:

  • Y60..255
  • Cr120..136
  • Cb120..136

如果您没有“Color Dropper”工具,只需转到ImageJ在线工具here并在下面上传我的输出图像并将鼠标悬停在它上面看到这样的值:


如果您在 Linux 上,您可以获得一个名为 gpick 的颜色滴管:

sudo apt install gpick

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2012-04-05
    • 2014-05-13
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    相关资源
    最近更新 更多