如何检测 ycrcb 中的白色?

Ria*_*tra 0 python opencv image-processing color-space

我想在 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)
Run Code Online (Sandbox Code Playgroud)

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

se_3 = cv.getStructuringElement(cv.MORPH_RECT,(3,3))
dst_dilate = cv.dilate(img, se_3, iterations = 1)
Run Code Online (Sandbox Code Playgroud)

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

res = cv.bitwise_and(rgb,rgb, mask= dst_dilate)
Run Code Online (Sandbox Code Playgroud)

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

对象是所有鸟类

Mar*_*ell 5

最简单的方法是加载图像,将其转换为所需的色彩空间并分割通道,将它们并排放置。然后使用系统的“颜色滴管工具”( macOS 上的“数字色度计”)查看您感兴趣的区域中各个通道的值:

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))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

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

如果您没有“Color Dropper”工具,只需转到此处的ImageJ在线工具并上传下面的输出图像,然后将鼠标悬停在它上面即可查看如下值:

在此输入图像描述


如果您使用的是 Linux,则可以使用以下命令调用颜色滴管gpick

sudo apt install gpick
Run Code Online (Sandbox Code Playgroud)