如何编写函数统计图像numpy数组中的绿色十字数量?
实现思路与代码完善
核心逻辑
要统计符合要求的绿色十字数量,关键是找到十字的中心像素——只有中心位置能满足「向上下左右四个方向各延伸至少2个绿色像素(值为128)」的条件。
具体实现步骤
- 确定遍历范围:由于每个十字需要向四个方向各延伸至少2个像素,中心不能在图像边缘。遍历的行索引
i范围是2 <= i <= 行数-3,列索引j范围是2 <= j <= 列数-3(确保i±2、j±2都在数组合法索引内)。 - 验证中心与方向:对每个候选中心
(i,j),需同时满足:- 中心像素本身是绿色(值为128);
- 向上的第1、2个像素都是128;
- 向下的第1、2个像素都是128;
- 向左的第1、2个像素都是128;
- 向右的第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
相关产品推荐
相关产品推荐

