如何将黑白图像转换为坐标?

时间:2018-01-12 12:44:16

标签: raspberry-pi

我试图设计一个垂直绘图仪,它必须是无线的。

我的主要想法是拍摄一张简单的黑白图像并将其转换为坐标。然后这些可以通过我将编写的程序来控制绘图仪。

但是,我似乎无法找到任何可以转换的程序或网站。我所希望的是一个程序或网站,它可以拍摄图像并将每个黑色部分转换为一系列或点作为坐标(左下角为(0,0))。 / p>

如果有任何问题,请告诉我。如果您对如何做到这一点有任何其他想法,请向我推荐,我会在要求进一步澄清之前尝试自己解决。谢谢。

2 个答案:

答案 0 :(得分:2)

我建议 ImageMagick ,它包含在大多数Linux发行版中,可用于macOS和Windows。

让我们从这张图片开始,这是6x2 - 我放大了它并在边缘周围放了一个红色笔划,这样你就可以在StackOverflow的白色背景上看到它及其范围:

enter image description here

因此,如果它是JPEG,BMP,TIFF,PNG,GIF并不重要,因为ImageMagick可以读取所有内容。如果我将其阈值设置为50%以确保它仅由纯黑色和白色组成并使输出为8位和文本,则可以轻松查看黑色像素及其坐标(在第一列中):

convert image.png -threshold 50% -depth 8 txt:

示例输出

# ImageMagick pixel enumeration: 6,2,65535,srgb
0,0: (0,0,0)  #000000  black
1,0: (65535,65535,65535)  #FFFFFF  white
2,0: (65535,65535,65535)  #FFFFFF  white
3,0: (0,0,0)  #000000  black
4,0: (65535,65535,65535)  #FFFFFF  white
5,0: (65535,65535,65535)  #FFFFFF  white
0,1: (65535,65535,65535)  #FFFFFF  white
1,1: (0,0,0)  #000000  black
2,1: (0,0,0)  #000000  black
3,1: (65535,65535,65535)  #FFFFFF  white
4,1: (65535,65535,65535)  #FFFFFF  white
5,1: (0,0,0)  #000000  black

因此,为了方便地查看黑色像素,请将其他所有内容删除:

convert start.png -threshold 50% -depth 8 txt: | grep black

示例输出

0,0: (0,0,0)  #000000  black
3,0: (0,0,0)  #000000  black
1,1: (0,0,0)  #000000  black
2,1: (0,0,0)  #000000  black
5,1: (0,0,0)  #000000  black

你现在可能会看到0,0坐标是左上角,而不是你要求的左下角,所以让我们先翻转图像:

convert start.png -threshold 50% -depth 8 -flip txt: | grep black

示例输出

1,0: (0,0,0)  #000000  black
2,0: (0,0,0)  #000000  black
5,0: (0,0,0)  #000000  black
0,1: (0,0,0)  #000000  black
3,1: (0,0,0)  #000000  black

因此,如果您只想要坐标,请使用awk过滤并整理:

convert start.png -threshold 50% -depth 8 -flip txt: | awk -F: '/black/{print $1}'

示例输出

1,0
2,0
5,0
0,1
3,1

答案 1 :(得分:1)

Mark Setchell在Imagemagick中有一个很好的方法。我想展示另一种方法。您可以使用稀疏颜色来获取坐标和颜色,而不是使用txt:输出长文本。 (当前IM 6.9.9.33中有一个小错误,所以我将使用IM 7 magick代替转换。所以使用相同的图像(没有翻转,所以0,0仍然在左上角):

magick image.png sparse-color:
0,0,gray(0) 1,0,gray(255) 2,0,gray(255) 3,0,gray(0) 4,0,gray(255) 5,0,gray(255) 0,1,gray(255) 1,1,gray(0) 2,1,gray(0) 3,1,gray(255) 4,1,gray(255) 5,1,gray(0)

magick image.png sparse-color:  | tr " " "\n"
0,0,gray(0)
1,0,gray(255)
2,0,gray(255)
3,0,gray(0)
4,0,gray(255)
5,0,gray(255)
0,1,gray(255)
1,1,gray(0)
2,1,gray(0)
3,1,gray(255)
4,1,gray(255)
5,1,gray(0)

或使用grep过滤灰色(0)并使用awk获取前两个逗号分隔值。

magick image.png sparse-color:  | tr " " "\n" | grep "gray(0)" | awk -F, '{print $1","$2}'
0,0
3,0
1,1
2,1
5,1