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)
我尽力了,但结果不正确,我需要你的意见来改变哪一部分以获得更好的结果。
最简单的方法是加载图像,将其转换为所需的色彩空间并分割通道,将它们并排放置。然后使用系统的“颜色滴管工具”( 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..255Cr120..136Cb120..136如果您没有“Color Dropper”工具,只需转到此处的ImageJ在线工具并上传下面的输出图像,然后将鼠标悬停在它上面即可查看如下值:
如果您使用的是 Linux,则可以使用以下命令调用颜色滴管gpick:
sudo apt install gpick
Run Code Online (Sandbox Code Playgroud)