LED 矩阵到阵列的图像
Image of LED matrix to an array
我想从一张大小为96x64的LED矩阵图片中读取像素。它们要么开要么关,我在下面提供了一个示例图片。
我应该只检查图像并使用例如 PIL 读取颜色,还是应该使用其他任何东西。我注意到矩阵有点倾斜并且没有完全对齐。有时组成它的小块相对于彼此有一点偏移。
编辑:
图片将从 youtube 上的实时流中捕获,因此它是视频。它将始终是相同的矩阵。我无法完全控制矩阵,如前所述,这是某人的 YouTube 直播,我无法改变周围环境。
一种方法可能是:
- 进行 4 点透视变换以将矩阵的每个角映射到图像的角
- 将结果缩放到 96x64
- 阈值
图像的像素与矩阵的 LED 非常吻合。
我只是在终端中用 ImageMagick 做的,像这样:
magick matrix.png -distort perspective "4,10 0,0 584,7 585,0 574,383 585,387 11,388 0,387" -scale 96x64\! -threshold 30% result.png
该命令意味着我想将输入图像中的点 4,10 映射到输出图像中的点 0,0 - 即 top-left 角。然后我想将输入图像中的点 584,7 映射到点 585,0 - 即 top-right 角等。
如果是视频,即使矩阵不是直线的,您也可以通过跨帧查看来确定 LED 中心的位置来改进它。您还可以优化寻找角点,因为角点像素可能会在视频中的某个时间点亮起。
如果将命令更改为以下内容,您将获得一个包含所需值的文本文件:
magick matrix.png -distort perspective "4,10 0,0 584,7 585,0 574,383 585,387 11,388 0,387" -scale 96x64\! -threshold 30% -compress none result.pgm
P2
是一个PGMheader表示文件是96x64,最亮的值为255。然后是前4行像素:
P2
96 64
255
255 255 255 0 255 0 255 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 255 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 0 255 255 255 255 255 0 255 255 255 255 255 0 0 255
255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 0 0 255 255 0 0 0 255 0 0 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 255 255 0 0 0 0 0 0 0 255 0 0 0 0 0 0 255 255 0 0 255 0 0 0 255 0 255 0 0 0 0 255 255 255 0 255 255 255 0 0
0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 255 0 0 0 0 0 0 0 255 255 0 255 255 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 0 255 255 255 0 0
255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 255 255 255 0 0 255 0 0 0 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 255 0 255 255 255 0 0 0 0 0
...
...
如果您想要 Python 答案,您可以将上面的代码转换为基于 ImageMagick 的 wand 或执行完全相同的步骤在 OpenCV 或 scikit-image
.
我想从一张大小为96x64的LED矩阵图片中读取像素。它们要么开要么关,我在下面提供了一个示例图片。
我应该只检查图像并使用例如 PIL 读取颜色,还是应该使用其他任何东西。我注意到矩阵有点倾斜并且没有完全对齐。有时组成它的小块相对于彼此有一点偏移。
编辑:
图片将从 youtube 上的实时流中捕获,因此它是视频。它将始终是相同的矩阵。我无法完全控制矩阵,如前所述,这是某人的 YouTube 直播,我无法改变周围环境。
一种方法可能是:
- 进行 4 点透视变换以将矩阵的每个角映射到图像的角
- 将结果缩放到 96x64
- 阈值
图像的像素与矩阵的 LED 非常吻合。
我只是在终端中用 ImageMagick 做的,像这样:
magick matrix.png -distort perspective "4,10 0,0 584,7 585,0 574,383 585,387 11,388 0,387" -scale 96x64\! -threshold 30% result.png
该命令意味着我想将输入图像中的点 4,10 映射到输出图像中的点 0,0 - 即 top-left 角。然后我想将输入图像中的点 584,7 映射到点 585,0 - 即 top-right 角等。
如果是视频,即使矩阵不是直线的,您也可以通过跨帧查看来确定 LED 中心的位置来改进它。您还可以优化寻找角点,因为角点像素可能会在视频中的某个时间点亮起。
如果将命令更改为以下内容,您将获得一个包含所需值的文本文件:
magick matrix.png -distort perspective "4,10 0,0 584,7 585,0 574,383 585,387 11,388 0,387" -scale 96x64\! -threshold 30% -compress none result.pgm
P2
是一个PGMheader表示文件是96x64,最亮的值为255。然后是前4行像素:
P2
96 64
255
255 255 255 0 255 0 255 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 255 0 0 0 0 0 0 255 255 255 255 255 0 255 255 255 255 255 0 255 255 255 255 255 0 255 255 255 255 255 0 0 255
255 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 255 0 0 255 255 0 0 0 255 0 0 255 255 255 255 255 255 255 0 255 255 255 255 255 255 255 255 0 0 255 255 0 0 0 0 0 0 0 255 0 0 0 0 0 0 255 255 0 0 255 0 0 0 255 0 255 0 0 0 0 255 255 255 0 255 255 255 0 0
0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 255 0 0 0 0 0 0 0 255 255 0 255 255 0 0 255 255 255 0 255 255 255 255 255 255 255 255 255 0 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 255 255 255 255 255 255 255 255 0 255 255 255 0 0
255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 0 0 0 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 0 0 255 255 0 0 255 255 255 255 255 255 0 0 255 0 0 0 255 255 0 0 255 255 255 255 255 0 0 0 0 0 0 0 0 0 255 0 255 255 255 0 0 0 0 0
...
...
如果您想要 Python 答案,您可以将上面的代码转换为基于 ImageMagick 的 wand 或执行完全相同的步骤在 OpenCV 或 scikit-image
.