numpy MSS sct.grab()产生的颜色空间是什么?

9jyewag0  于 2023-04-06  发布在  其他
关注(0)|答案(1)|浏览(222)
  • Python 3.10,opencv-python==4.5.4.60*

我很难理解MSS截图的颜色格式。
下面是我正在截图的屏幕部分(使用正确/预期的颜色,手动拍摄):

下面是我使用的截图代码:

with mss.mss() as sct:
    monitor = rect
    res = np.array(sct.grab(monitor))[:, :, :3] # remove alpha

当我使用cv2.imsave()cv2.imshow()时,屏幕截图看起来和预期的一样。如果我试图基于[R,G,B]颜色在此图像上创建蒙版,它会产生相反的结果,这意味着MSS屏幕截图的默认颜色空间是BGRA。
如果我执行以下操作:

res = cv2.cvtColor(res, cv2.COLOR_BGRA2RGB)
cv2.imshow("res", res)
cv2.waitKey(0)

它产生如下结果:

但是,* 然后 * 我能够正确执行RGB遮罩。

我可能只是回答了我自己的问题,但是MSS屏幕截图是BGRA格式,OpenCV * 期望 * BGR格式-这可以解释为什么RGB图像在使用cv2.imshow()cv2.imsave()时会反转颜色?

ohtdti5x

ohtdti5x1#

你是对的,MSS使用BGRA:

  • https://python-mss.readthedocs.io/api.html?highlight=BGRA#mss.tools.mss.base.ScreenShot.array_interface
  • https://github.com/BoboTiG/python-mss/blob/v7.0.1/mss/screenshot.py#L30
  • https://github.com/BoboTiG/python-mss/blob/v7.0.1/mss/screenshot.py#L46-L47

你甚至可以找到一些转换的提示:https://python-mss.readthedocs.io/examples.html#bgra-to-rgb
事实上,如果你找到更好的东西,我会很高兴增强文档:)

相关问题