首页 > 解决方案 > 沿颜色边框裁剪图像的方法?

问题描述

应将诸如此 ( https://imgur.com/a/1B7nQnk ) 之类的图像裁剪为单个单元格。遗憾的是,垂直距离不是静态的,因此需要应用更复杂的方法。由于单元格具有交替的背景颜色(灰色和白色,可能在低对比度显示器上不可见),我认为可以获得白色和灰色之间边界的坐标,从而可以完成准确的裁剪。有没有办法,例如,将图像转换成一个巨大的二维数组,数字对应于像素的颜色?......所以基本上:

在此处输入图像描述

还是有其他方法?

标签: pythonimage-processing

解决方案


这是一个片段,展示了如何访问图像的各个像素。为简单起见,它首先将图像转换为灰度,然后打印出每行的前三个像素。它还指示第一个像素的亮度与前一行该列中的那个像素的不同之处——您可以使用它来检测垂直边界。

你可以在右侧做类似的事情来确定边界在哪里(你已经确定了垂直边界)。

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]

推荐阅读