- 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()
时会反转颜色?
1条答案
按热度按时间ohtdti5x1#
你是对的,MSS使用BGRA:
你甚至可以找到一些转换的提示:https://python-mss.readthedocs.io/examples.html#bgra-to-rgb
事实上,如果你找到更好的东西,我会很高兴增强文档:)