gpt4 book ai didi

node.js - 如何获取黑色背景上的白点坐标

转载 作者:太空宇宙 更新时间:2023-11-03 22:53:46 24 4
gpt4 key购买 nike

一些背景:

我正在构建一个 AR艺术装置,并且需要跟踪一个人穿过房间的情况。

为此,我构建了一个头部部件,该头部部件具有多个红外灯(带漫射器)和一个摄像头(USB 网络摄像头),该摄像头具有光学滤镜,可去除图像中的大部分/所有可见光,以及对图像进行了一些调整,基本上让我在黑色背景上留下了白点。

以捕获房间边界的方式设置网络摄像头非常简单,但我不确定如何处理黑白图像以获得 x,y 坐标每个点。

示例图像输出:(这是一个模型,因为我此时身上没有模型,并且请记住,数据将来自有效的视频) enter image description here

我正在使用的工具

  • 用于处理的 NodeJS
  • 用于图像捕捉的罗技网络摄像头
  • 用于视觉效果的 Google Cardboard
  • 聚苯乙烯泡沫塑料球中的红外 LED 可产生漂亮的漫射光点

有什么想法吗?

最佳答案

我可以想到使用 ImageMagick 实现此目的的三种方法,它具有 node 绑定(bind),并且安装在大多数 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)

这向您显示(在输出的最后一行中)白色 Blob 的大小为 11 像素 x 11 像素,位于图像中距左边缘 143 像素、距顶部向下 164 像素的位置。它的质心位于 148,169,面积为 97 像素,颜色为白色。

找到的第一个对象(在输出的倒数第二行中)是整个图像,您可以忽略它,因为它的颜色是黑色,即 rgb(0,0,0)。

我也可以解释一下这些参数...我转换为灰度,因为关联成分分析传统上会在黑白图像中寻找黑色背景上的白色对象。然后,我设置阈值以获得纯白色和纯黑色 - 例如,您可能需要在实际系统上使用中值滤波器来消除噪声 -median 3verbose=true 表示该命令应打印它找到的所有 Blob 的列表,8 表示将 8 连接的像素视为该 Blob 的一部分。相同的 Blob ,即在其东北角、东南角、西南角或西北角接触另一个像素的像素被视为同一 Blob 的一部分 - 如果将其设置为 4,则像素必须直接位于旁边或上方/彼此在下被视为邻居。

如果您想“装箱”它找到的区域,您可以这样做:

convert image.png -stroke red -fill none -strokewidth 2 -draw "rectangle 143,164 154,175" output.png

enter image description here

第三种方法速度较慢,需要将图像转换为文本,然后搜索单词“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它通过 node 执行另一个 ImageMagick 过程,如果您在命令行尝试上述操作并发现它足够适合您,以至于您想要使用 ImageMagick,希望您能够适应它。

关于node.js - 如何获取黑色背景上的白点坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30907403/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com