OpenCV imshow()处理Unity3D ARGB32格式图像整体偏蓝问题求助
ARGB32图像偏蓝问题修复方案
问题原因
- Unity输出的WebCamTexture ARGB32格式通道顺序为 A→R→G→B,四个通道的数组索引分别对应0、1、2、3
- OpenCV原生支持的图像通道顺序为BGR(3通道)/BGRA(4通道),直接传入ARGB格式图像会因通道不匹配导致颜色偏移,出现整体偏蓝的问题
修复代码(无alpha通道场景,最常用)
try: while(True): data = sock.recv(480 * 640 * 4) if(len(data) == 480 * 640 * 4): # 替换废弃的fromstring为frombuffer,避免运行警告 image = numpy.frombuffer(data, numpy.uint8).reshape(480, 640, 4) # 提取ARGB中的B/G/R通道,调整为OpenCV兼容的BGR顺序 bgr_image = image[:, :, [3,2,1]] cv2.imshow('Image', bgr_image) key = cv2.waitKey(1) & 0xFF if key == ord("q"): break finally: sock.close() # 释放OpenCV窗口资源,避免进程残留 cv2.destroyAllWindows()
修复代码(保留alpha通道场景)
如果业务需要用到透明通道,可以调整为OpenCV兼容的BGRA格式:
# 调整通道顺序为B→G→R→A bgra_image = image[:, :, [3,2,1,0]] cv2.imshow('Image', bgra_image)
额外说明
也可以通过OpenCV内置的颜色转换接口实现格式转换,效果和手动调整通道一致:
# ARGB转BGRA再转BGR bgra_image = cv2.cvtColor(image, cv2.COLOR_ARGB2BGRA) bgr_image = cv2.cvtColor(bgra_image, cv2.COLOR_BGRA2BGR)
内容的提问来源于stack exchange,提问作者Thinkal VB
相关产品推荐
相关产品推荐

