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

Python中查找特定红色像素坐标的优化实现方案求助

高效获取指定颜色区间像素坐标的Numpy优化方案

你的嵌套循环确实能实现需求,但面对大图像时效率会非常低——Numpy的核心优势就是向量化操作,可以完全替代Python层面的循环,大幅提升速度。

问题分析

你之前尝试的np.where没成功,是因为两个问题:

  1. 你写的np.where((img > sought) & (img < gray), 0, img)是修改像素值,不是提取坐标;
  2. 没有确保三个颜色通道同时满足区间条件,需要用all(axis=2)来合并通道的判断结果。

优化后的代码

import numpy as np
import cv2

# 先读入图像(示例)
# img = cv2.imread("your_image_path.jpg")

sought = np.array([10, 10, 140])  # BGR格式的颜色下限
gray = np.array([50, 50, 255])    # BGR格式的颜色上限

# 生成每个通道的区间掩码,再合并为全通道满足的掩码
channel_mask = (img > sought) & (img < gray)
full_mask = channel_mask.all(axis=2)  # axis=2表示沿颜色通道维度判断

# 获取满足条件的像素坐标:np.where返回(y坐标数组, x坐标数组)
y_coords, x_coords = np.where(full_mask)

# 输出坐标(和原代码格式一致)
for x, y in zip(x_coords, y_coords):
    print(x)
    print(y)
    print("############################################")

关键说明

  1. 向量化操作:所有掩码计算都是在Numpy的底层C代码中执行,比Python循环快几十到上百倍;
  2. 通道顺序:cv2读入的图像是BGR格式,你的sought和gray设置的是[蓝, 绿, 红],和这个格式匹配,不需要转换;
  3. 掩码合并:all(axis=2)确保只有当B、G、R三个通道都落在对应区间内时,该像素才被选中。

内容的提问来源于stack exchange,提问作者wet qr95

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 21:26:27