Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 沿颜色边框裁剪图像的方法?_Python_Image Processing - Fatal编程技术网

Python 沿颜色边框裁剪图像的方法?

Python 沿颜色边框裁剪图像的方法?,python,image-processing,Python,Image 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]

你可能会发现另一个图像处理问题很有用。这正是我要找的!谢谢