我可以想到三种使用 ImageMagick 的方法来做到这一点,ImageMagick 具有node绑定功能,安装在大多数 Linux 发行版上,可用于 OSX 和 Windows。
首先,在命令行中,非常简单地键入以下内容:
identify -precision 5 -define identify:locate=maximum -define identify:limit=3 image.png
Channel maximum locations:
Gray: 65535 (1) 146,164 147,164 148,164
这向您展示了三个最亮的像素是从左上角到 146 像素,从左上角向下 164 像素,以及它旁边的两个在其右侧。
或者,如果您对点的面积和/或质心感兴趣,您可以使用 ImageMagick进行连通分量分析,如下所示:
convert image.png \
-colorspace gray -threshold 10% \
-define connected-components:verbose=true \
-connected-components 8 output.png
Objects (id: bounding-box centroid area mean-color):
0: 818x502+0+0 408.6,250.5 410539 srgb(0,0,0)
1: 11x11+143+164 148.0,169.0 97 srgb(255,255,255)
这向您显示(在输出的最后一行),白色斑点是 11 像素 x 11 像素,位于图像左边缘 143 像素和顶部下方 164 像素处。它的质心为 148,169,面积为 97 像素,颜色为白色。
找到的第一个对象(在输出的倒数第二行)是整个图像,您可以忽略它,因为它的颜色是黑色,即 rgb(0,0,0)。
我也可以稍微解释一下参数...我转换为灰度是因为Coonected Component Analysis传统上在黑白图像中寻找黑色背景上的白色对象。然后我设置阈值以获得纯白色和纯黑色 - 例如,您可能需要在真实系统上使用中值滤波器来消除噪声-median 3。这verbose=true意味着该命令应该打印它找到的所有 blob 的列表,以及将88 连接的像素视为同一个 blob 的一部分的方法,即一个像素在其 NE、SE、SW 或NW 角被视为同一个 blob 的一部分 - 如果将其设置为4,则像素必须直接位于彼此旁边或上方/下方才能被视为邻居。
如果你想“装箱”它找到的区域,你可以这样做:
convert image.png -stroke red -fill none -strokewidth 2 -draw "rectangle 143,164 154,175" output.png

第三种方法速度较慢,它涉及将图像转换为文本,然后搜索单词“white”。所以。让我们开始简单,只需将图像转换为文本,如下所示:
convert image.png -threshold 50% txt:
# ImageMagick pixel enumeration: 818,502,255,srgb
0,0: (0,0,0) #000000 black
1,0: (0,0,0) #000000 black
2,0: (0,0,0) #000000 black
3,0: (0,0,0) #000000 black
...
... 410,000 lines later
...
813,501: (0,0,0) #000000 black
814,501: (0,0,0) #000000 black
815,501: (0,0,0) #000000 black
816,501: (0,0,0) #000000 black
817,501: (0,0,0) #000000 black
现在,让我们对其进行改进,并仅查找白色像素(在 Windows 上,您将使用FINDSTR而不是grep):
convert image.png -threshold 50% txt: | grep white
146,164: (255,255,255) #FFFFFF white
147,164: (255,255,255) #FFFFFF white
148,164: (255,255,255) #FFFFFF white
149,164: (255,255,255) #FFFFFF white
150,164: (255,255,255) #FFFFFF white
145,165: (255,255,255) #FFFFFF white
146,165: (255,255,255) #FFFFFF white
147,165: (255,255,255) #FFFFFF white
148,165: (255,255,255) #FFFFFF white
149,165: (255,255,255) #FFFFFF white
150,165: (255,255,255) #FFFFFF white
151,165: (255,255,255) #FFFFFF white
144,166: (255,255,255) #FFFFFF white
145,166: (255,255,255) #FFFFFF white
146,166: (255,255,255) #FFFFFF white
147,166: (255,255,255) #FFFFFF white
148,166: (255,255,255) #FFFFFF white
149,166: (255,255,255) #FFFFFF white
150,166: (255,255,255) #FFFFFF white
151,166: (255,255,255) #FFFFFF white
152,166: (255,255,255) #FFFFFF white
143,167: (255,255,255) #FFFFFF white
144,167: (255,255,255) #FFFFFF white
145,167: (255,255,255) #FFFFFF white
146,167: (255,255,255) #FFFFFF white
147,167: (255,255,255) #FFFFFF white
148,167: (255,255,255) #FFFFFF white
149,167: (255,255,255) #FFFFFF white
150,167: (255,255,255) #FFFFFF white
151,167: (255,255,255) #FFFFFF white
152,167: (255,255,255) #FFFFFF white
153,167: (255,255,255) #FFFFFF white
143,168: (255,255,255) #FFFFFF white
144,168: (255,255,255) #FFFFFF white
145,168: (255,255,255) #FFFFFF white
146,168: (255,255,255) #FFFFFF white
147,168: (255,255,255) #FFFFFF white
148,168: (255,255,255) #FFFFFF white
149,168: (255,255,255) #FFFFFF white
150,168: (255,255,255) #FFFFFF white
151,168: (255,255,255) #FFFFFF white
152,168: (255,255,255) #FFFFFF white
153,168: (255,255,255) #FFFFFF white
143,169: (255,255,255) #FFFFFF white
144,169: (255,255,255) #FFFFFF white
145,169: (255,255,255) #FFFFFF white
146,169: (255,255,255) #FFFFFF white
147,169: (255,255,255) #FFFFFF white
148,169: (255,255,255) #FFFFFF white
149,169: (255,255,255) #FFFFFF white
150,169: (255,255,255) #FFFFFF white
151,169: (255,255,255) #FFFFFF white
152,169: (255,255,255) #FFFFFF white
153,169: (255,255,255) #FFFFFF white
143,170: (255,255,255) #FFFFFF white
144,170: (255,255,255) #FFFFFF white
145,170: (255,255,255) #FFFFFF white
146,170: (255,255,255) #FFFFFF white
147,170: (255,255,255) #FFFFFF white
148,170: (255,255,255) #FFFFFF white
149,170: (255,255,255) #FFFFFF white
150,170: (255,255,255) #FFFFFF white
151,170: (255,255,255) #FFFFFF white
152,170: (255,255,255) #FFFFFF white
153,170: (255,255,255) #FFFFFF white
143,171: (255,255,255) #FFFFFF white
144,171: (255,255,255) #FFFFFF white
145,171: (255,255,255) #FFFFFF white
146,171: (255,255,255) #FFFFFF white
147,171: (255,255,255) #FFFFFF white
148,171: (255,255,255) #FFFFFF white
149,171: (255,255,255) #FFFFFF white
150,171: (255,255,255) #FFFFFF white
151,171: (255,255,255) #FFFFFF white
152,171: (255,255,255) #FFFFFF white
153,171: (255,255,255) #FFFFFF white
144,172: (255,255,255) #FFFFFF white
145,172: (255,255,255) #FFFFFF white
146,172: (255,255,255) #FFFFFF white
147,172: (255,255,255) #FFFFFF white
148,172: (255,255,255) #FFFFFF white
149,172: (255,255,255) #FFFFFF white
150,172: (255,255,255) #FFFFFF white
151,172: (255,255,255) #FFFFFF white
152,172: (255,255,255) #FFFFFF white
145,173: (255,255,255) #FFFFFF white
146,173: (255,255,255) #FFFFFF white
147,173: (255,255,255) #FFFFFF white
148,173: (255,255,255) #FFFFFF white
149,173: (255,255,255) #FFFFFF white
150,173: (255,255,255) #FFFFFF white
151,173: (255,255,255) #FFFFFF white
146,174: (255,255,255) #FFFFFF white
147,174: (255,255,255) #FFFFFF white
148,174: (255,255,255) #FFFFFF white
149,174: (255,255,255) #FFFFFF white
150,174: (255,255,255) #FFFFFF white
至于一个node版本,我真的不是很擅长,node但我可以指出我的答案here,它通过另一个 ImageMagick 过程node并希望你能适应它,如果你在命令行上尝试上述方法并发现它对你来说足够好你想使用 ImageMagick。