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

基于numpy ndarray遍历粉色像素沿正交方向测算图像黑区宽度

解决方案

你原有的代码是遍历全图所有像素打印值,完全不需要这么做——你已经提前提取到了所有粉色像素的坐标,只需要针对这些坐标做定向步进遍历即可,核心逻辑是沿指定正交方向逐像素移动,首次检测到黑到白的过渡时记录步进长度,就是对应方向的黑色区域宽度。

前置参数定义

先根据你的实际场景配置固定参数,避免硬编码:

  • 固定黑、白、粉色的RGB参考值,可根据图像实际色彩微调
  • 配置正交行进方向的偏移量,默认给出上下左右4个正方向,可对照你图里的黄色标注线保留需要的方向
  • 配置颜色容差,适配图像压缩带来的轻微色偏

完整实现代码

import numpy as np

# ========== 以下参数按实际场景修改 ==========
# 颜色参考值
BLACK_RGB = np.array([0, 0, 0], dtype=np.uint8)
WHITE_RGB = np.array([255, 255, 255], dtype=np.uint8)
# 行进方向:(行偏移, 列偏移),不需要的方向直接注释掉即可
MOVE_DIRECTIONS = [
    (0, 1),   # 向右
    (0, -1),  # 向左
    (1, 0),   # 向下
    (-1, 0)   # 向上
]
# 颜色匹配容差,纯色无压缩的图设为0即可
COLOR_ERR_TOL = 3
# 你已经提取到的粉色像素坐标数组,要求shape为[N, 2],每行存储(行号i, 列号j)
pink_pixels_arr: np.ndarray = ...
# 原始RGB图像数组
rgb_img: np.ndarray = ...
# ==========================================

img_h, img_w = rgb_img.shape[:2]
black_width_res = []

def match_color(pixel: np.ndarray, target: np.ndarray) -> bool:
    """带容差的像素颜色匹配"""
    return np.all(np.abs(pixel.astype(np.int16) - target) <= COLOR_ERR_TOL)

# 只遍历粉色像素点,不扫全图
for start_i, start_j in pink_pixels_arr:
    dir_width = {}
    # 每个方向单独步进
    for di, dj in MOVE_DIRECTIONS:
        cur_i, cur_j = start_i, start_j
        step_count = 0
        # 不超出图像边界时持续步进
        while 0 <= cur_i < img_h and 0 <= cur_j < img_w:
            cur_p = rgb_img[cur_i, cur_j]
            # 检测到白色边界,记录距离终止当前方向遍历
            if match_color(cur_p, WHITE_RGB):
                dir_width[f"dir({di},{dj})"] = step_count
                break
            cur_i += di
            cur_j += dj
            step_count += 1
    black_width_res.append({
        "pink_pixel_pos": (start_i, start_j),
        "black_width_each_dir": dir_width
    })

# 输出结果示例
for item in black_width_res:
    print(f"粉色像素坐标{item['pink_pixel_pos']},各方向黑色区域宽度:{item['black_width_each_dir']}")

使用说明

  • 如果你的正交方向不是正上下左右(比如和参考方向呈90度的斜向),直接修改MOVE_DIRECTIONS里的坐标偏移值即可
  • 因为是沿直线正交行进,直接用步进计数作为距离即可,不需要额外计算欧氏距离,执行效率更高
  • 如果图像存在少量噪点,可适当调大COLOR_ERR_TOL数值,避免误判边界
  • 该逻辑只遍历粉色像素和对应方向上的黑色路径像素,比你原有全图遍历的代码效率高几个数量级,大尺寸图像也能快速跑完

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:54:38