You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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,这点要注意。

正确设置颜色的两种方式:

  1. 直接按照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  # 红色通道
    
  2. 转换通道顺序后按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

火山引擎 最新活动