You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Matplotlib获取像素RGB值并提取红色像素生成新图?

Matplotlib识别红色像素问题解答

一、先搞懂你打印的像素值是什么

你打印出来的[0. 0. 0.1]这类值,是归一化后的RGB像素值:

  • Matplotlib读图像时,会把原本0-255的RGB整数(比如纯红是(255,0,0))自动转成0到1之间的浮点数
  • 每个像素是三个数的数组,分别对应红(R)、绿(G)、蓝(B)三个颜色通道的亮度
  • 举个例子:[1. 0. 0.]就是纯红色,[0. 0. 1.]是纯蓝色,[0.5 0.5 0.5]是灰色

二、简单实现方法(比逐像素循环高效多了)

直接用NumPy做向量运算,完整代码如下:

import matplotlib.pyplot as plt
import numpy as np

def find_red_pixels(image_path, upper_threshold=100, lower_threshold=50):
    """找出图像里的红色像素,生成只含红色像素的二值图并保存"""
    # 读取图像,Matplotlib默认读成RGB格式,像素值归一化到0-1
    img = plt.imread(image_path)
    # 把0-1的浮点数转成0-255的整数,方便用常用阈值判断
    img_255 = (img * 255).astype(np.uint8)
    
    # 红色像素判断逻辑:红通道够亮,绿、蓝通道够暗
    # 可根据实际图像调整阈值,比如红色偏暗就调低lower_threshold
    red_mask = (img_255[:, :, 0] > lower_threshold) & \
               (img_255[:, :, 1] < upper_threshold) & \
               (img_255[:, :, 2] < upper_threshold)
    
    # 创建结果图:红色像素位置设为白色,其他区域全黑
    red_img = np.zeros_like(img_255)
    red_img[red_mask] = [255, 255, 255]
    
    # 保存生成的图片
    plt.imsave("map-red-pixels.jpg", red_img)
    return red_img

# 调用时替换成你的图像路径即可
find_red_pixels("你的图片路径.jpg")

代码关键点说明

  • plt.imread()读图自动转为RGB格式,不用手动调整通道顺序
  • 转回0-255整数是因为咱们平时习惯用这个范围的颜色值,阈值调整更顺手
  • 布尔掩码red_mask能一次性筛选出所有符合条件的红色像素,比逐像素循环效率高很多
  • 生成的二值图中,原红色像素位置显示白色,其余区域为黑色,直观易懂

三、额外小提示

  • 如果图像是用OpenCV读取的,默认是BGR格式,需要先转成RGB:img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
  • 阈值不是固定值:若结果杂色多,就提高upper_threshold;若漏选红色,就降低lower_threshold

内容的提问来源于stack exchange,提问作者Franklin Hole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:40:54