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

如何编写函数统计图像numpy数组中的绿色十字数量?

实现思路与代码完善

核心逻辑

要统计符合要求的绿色十字数量,关键是找到十字的中心像素——只有中心位置能满足「向上下左右四个方向各延伸至少2个绿色像素(值为128)」的条件。

具体实现步骤

  • 确定遍历范围:由于每个十字需要向四个方向各延伸至少2个像素,中心不能在图像边缘。遍历的行索引i范围是2 <= i <= 行数-3,列索引j范围是2 <= j <= 列数-3(确保i±2、j±2都在数组合法索引内)。
  • 验证中心与方向:对每个候选中心(i,j),需同时满足:
    1. 中心像素本身是绿色(值为128);
    2. 向上的第1、2个像素都是128;
    3. 向下的第1、2个像素都是128;
    4. 向左的第1、2个像素都是128;
    5. 向右的第1、2个像素都是128。
  • 计数:每找到一个符合条件的中心,计数器加1。

完善后的代码

import numpy as np

def numberOfCrosses(M):
    cross = 0
    rows, cols = M.shape
    # 遍历所有可能的十字中心位置
    for i in range(2, rows - 2):
        for j in range(2, cols - 2):
            # 检查中心及四个方向的像素是否符合要求
            if (M[i, j] == 128 and
                M[i-1, j] == 128 and M[i-2, j] == 128 and
                M[i+1, j] == 128 and M[i+2, j] == 128 and
                M[i, j-1] == 128 and M[i, j-2] == 128 and
                M[i, j+1] == 128 and M[i, j+2] == 128):
                cross += 1
    return cross

补充说明

  • 无需额外标记已检测的十字:因为只有真正的中心能满足所有方向的条件,十字线上的其他像素无法同时满足四个方向各2个绿色像素的要求,不会被重复计数。
  • 若图像存在噪声(比如个别绿色像素不是十字的一部分),可以考虑先对数组做简单的形态学滤波(如腐蚀操作),但题目未提及噪声,当前逻辑已足够。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:45:30