OpenCV中设置RGB颜色显示为蓝色的原因及正确设置方法
问题分析与解决方案
这是个OpenCV新手非常容易踩的坑——OpenCV默认采用BGR颜色通道顺序,而非我们日常习惯的RGB顺序!
你想要设置的红色是rgb(255,26,26),但在OpenCV加载的图像数组里,通道排列顺序是蓝(B)→绿(G)→红(R)。你把255赋值给了第一个通道(蓝色通道),26给了绿、红通道,最终显示出来自然是蓝色而非红色。另外还要提一句:你代码里写的heatmap[i][j][0]=256是错误的,像素值的合法范围是0-255,256会被自动截断为255,这点要注意。
正确设置颜色的两种方式:
直接按照BGR顺序赋值
把目标RGB颜色转换成BGR顺序:红色rgb(255,26,26)对应的BGR值是(26,26,255),修改代码如下:heatmap[i][j][0] = 26 # 蓝色通道 heatmap[i][j][1] = 26 # 绿色通道 heatmap[i][j][2] = 255 # 红色通道转换通道顺序后按RGB操作
如果更习惯用RGB逻辑,可以先把图像从BGR转成RGB格式,之后就能按RGB顺序赋值;但要注意:如果后续用cv2.imshow显示图像,需要再转回BGR格式,否则颜色依然会错乱:# 将原图像从BGR转成RGB img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) heatmap = np.zeros_like(img_rgb) # 按RGB顺序赋值红色 heatmap[i][j][0] = 255 # 红色通道 heatmap[i][j][1] = 26 # 绿色通道 heatmap[i][j][2] = 26 # 蓝色通道 # 若要显示,需转回BGR heatmap_bgr = cv2.cvtColor(heatmap, cv2.COLOR_RGB2BGR) cv2.imshow('heatmap', heatmap_bgr)
内容的提问来源于stack exchange,提问作者jejjejd




