【问题标题】:opencv/python: mask in module cv2 while streaming webcam videoopencv/python:流式传输网络摄像头视频时模块 cv2 中的掩码
【发布时间】:2013-01-11 08:57:12
【问题描述】:

大家好,我正在尝试使用我的网络摄像头制作游戏,我需要一些物体从屏幕上掉下来,同时我用我的网络摄像头流式传输视频(该流是我的背景)。

我正在使用 python 和 opencv 的模块 cv2

问题是:如何对这些对象应用蒙版?我已经有一个图像作为原始图像的蒙版,但我不知道如何应用它来减去原始图像的背景..

我已经尝试使用 cv2.bitwise_and 但什么也没发生,图像在黑色背景下保持不变:

#targets
original_ball = cv2.imread("Aqua-Ball-Red-icon.png")
ball = cv2.resize(bola_original, (64,64), fx=1, fy=1)
#mask
mask_original = cv2.imread("input-mask.png",0)
mask = cv2.resize(mask_original, (64,64), fx=1, fy=1)
res = cv2.bitwise_and(ball, ball, mask = mask)

提前致谢!

【问题讨论】:

  • 你的掩码的 0/1 值是多少?
  • 既然您介绍了游戏,您是否检查过模块'pygame'?
  • 是的,我已经做了,但我已经使用 opencv(cv2 模块)和 numpy 制作了整个游戏,我唯一的问题是游戏中目标的掩码

标签: python opencv webcam mask


【解决方案1】:

由于掩码图像名称旁边的 0 参数,掩码未出现)。

【讨论】:

    【解决方案2】:

    如果您使用的是cv2,那么您就是在使用numpy 数组,没有必要求助于opencv 来获得像掩码这样简单的东西。

    首先,操作(可能乘以)您的蒙版数组,使您想要的值(即:那些未被屏蔽的值)具有值 1。然后,将您的源图像乘以您的蒙版。这将使生成的图像具有掩码 == 1 的原始像素和掩码 == 0 的 0(即:黑色)。

    这里是它的要点:

    import numpy
    original_ball = cv2.imread("Aqua-Ball-Red-icon.png")
    ball = cv2.resize(bola_original, (64,64), fx=1, fy=1)
    mask_original = cv2.imread("input-mask.png",0)
    mask = cv2.resize(mask_original, (64,64), fx=1, fy=1)
    
    max_value= numpy.max(mask)
    mask/=max_value
    res= ball*mask
    

    根据您的 input-mask.png 的颜色深度,您可能需要先将其降低为灰度

    【讨论】:

    • 谢谢,有道理。但是现在我收到一个我不明白的错误:'res = ball*mask ValueError: 操作数不能与形状一起广播(64,64,3)(64,64)'这是否意味着这两个图像有不同的形状?是因为在'mask_original = cv2.imread(“input-mask.png”,0)'中添加了标志0我做错了什么?
    猜你喜欢
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多