Python OpenCV灰度视频输出问题:彩色叠加为何显示白色?
解决OpenCV在灰度相机帧上叠加彩色图层显示白色的问题
核心问题原因
你的IDS UI221工业相机输出的是单通道灰度图像(配置为IS_COLORMODE_MONOCHROME,8位深度,单字节像素)。OpenCV的绘图函数(cv2.rectangle、cv2.putText)在单通道图像上绘制时,会自动丢弃颜色的多通道信息,仅保留亮度值,导致所有设置的彩色最终显示为白色。
错误尝试的问题
之前调用cv2.cvtColor(frame, cv2.COLOR_GRAY2RGB)但未将转换结果赋值给frame,转换后的3通道图像没有替换原单通道帧,所以绘图时依然在灰度图上操作,自然看不到彩色。
正确解决方案
必须将单通道灰度帧转换为3通道BGR格式(OpenCV默认的彩色图像格式),并且要把转换结果重新赋值给原变量:
# 获取相机输出的灰度帧 frame = camera.get_frame() # 替换为你实际获取帧的代码 # 关键:将灰度帧转换为3通道BGR彩色图 frame = cv2.cvtColor(frame, cv2.COLOR_GRAY2BGR) # 现在绘制彩色图形和文本 # 示例:绘制蓝色矩形和文本(注意OpenCV颜色是BGR顺序,蓝色对应(255,0,0)) cv2.rectangle(frame, (x_min, y_min), (x_max, y_max), (255, 0, 0), 2) cv2.putText(frame, decoded_barcode, (x_min, y_min-10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 0, 0), 2) # 显示处理后的帧 cv2.imshow("Barcode Scanner", frame)
验证方法
转换后可以通过print(frame.shape)检查帧的维度,正常应该输出(高度, 宽度, 3),表示这是一个3通道彩色图像。
内容的提问来源于stack exchange,提问作者CBJFan2009
相关产品推荐
相关产品推荐

