我有一个Pygame黑色显示屏,我将在上面画一个白色的字母,如下图所示。显示器的大小可以是100x100像素以上的任何大小。在
我知道我可以用这样的方法来获得曲面二维阵列:
miSuface = pygame.display.get_surface()
miCoso = pygame.surfarray.array2d(miSuface)
但是,我想以某种方式将这个数组转换成一个7x5位的矩阵,其中0对应一个黑色像素,1对应一个白色像素。我的最终目的是使用矩阵来训练神经网络并创建一个简单的OCR。我有什么办法可以做到这一点吗?还是有更好的方法来获得7x5矩阵?在
我不太熟悉对
pygame.surfarray.array2d()
的调用。但是,由于你要从一个二进制颜色布局到一个更小的二进制颜色矩阵,你可以使用你的新比例来细分原始图像,以便正确地为生成的正方形上色。我举个例子。在假设您的初始图像是14x10,您希望有一个7x5矩阵。初始图像如下所示:
你需要做的是把x轴除以7,把y轴除以5。因为我选择了很好的数字,你将看到的大图像的切片将是2x2。以左上角的2x2块为例:
^{pr2}$这个小矩阵映射到7x5图像的一个像素。显然,在这种情况下,它将是0。让我们看看右下角:
这将映射到7x5图像中的值1。幸运的是,在这个例子中,你可以看到,在初始值为1000的情况下,这个问题并不复杂。在
将此方法应用到我的示例中,缩小的7x5图像如下所示:
psuecode步骤:
求小矩阵的大小(除以5和7)。这将适用于尺寸大于7x5的任何图像。
对于每个小矩阵,计算黑白空格(0和1)。
决定最后的7x5矩阵中的空格应该是黑色还是白色。在我的例子中,我说最后一个空格应该是黑色if(whitesquares>;=number of black squares)。我担心使用这个会给你带来麻烦,因为你的笔的尺寸相对7x5刻度的笔要薄一些。如果这是一个问题,请尝试类似If(白色方块的数量*2>;=黑色方块的数量)。这有效地增加了白色方块的权重。
我很高兴详细介绍一下这个伪代码。告诉我。在
最后,如果您仍然有问题,我可以尝试使用大于7x5的尺寸。它将给你更高的精度,但代价是你的OCR算法。祝你好运。在
我不知道有什么方法可以直接将array2d压缩成更小的数组,或者包含1位颜色信息的数组。但是,您可以执行以下操作:
相关问题 更多 >
编程相关推荐