像这样的图像(https://imgur.com/a/1B7nQnk)应该裁剪到单个单元格中。可悲的是,垂直距离不是固定的,因此需要采用更复杂的方法。由于单元格具有交替的背景色(灰色和白色,在低对比度的监视器上可能看不到),我认为有可能获得白色和灰色之间的边界坐标,从而可以实现精确裁剪。是否有办法将图像转换成巨大的二维阵列,其数字与像素的颜色相对应?……基本上就是这样:
还是有另一种方法?
答案 0 :(得分:0)
以下是显示如何访问图像各个像素的代码段。为简单起见,它首先将图像转换为灰度,然后打印出每行的前三个像素。它还指示第一个像素的亮度与上一行该列中的像素的亮度不同(可用于检测垂直边界)。
您可以在右侧进行类似的操作,以确定边界在该侧的位置(已确定垂直边界)。
from PIL import Image
IMAGE_FILENAME = 'cells.png'
WHITE = 255
img = Image.open(IMAGE_FILENAME).convert('L') # convert image to 8-bit grayscale
WIDTH, HEIGHT = img.size
data = list(img.getdata()) # convert image data to a list of integers
# convert that to a 2D list (list of lists of integers)
data = [data[offset:offset+WIDTH] for offset in range(0, WIDTH*HEIGHT, WIDTH)]
prev_pixel = WHITE
for i, row in enumerate(range(HEIGHT)):
possible_boundary = ' boundary?' if data[row][0] != prev_pixel else ''
print(f'row {i:5,d}: {data[row][:3]}{possible_boundary}')
prev_pixel = data[row][0]