преобразовать его в массив значений rgb
rgbVals = getRGBValues(im) # no idea how to do this offhand
for row in range(20): # first 20 px
for col,px in enumerate(rgbVals[row]):
rgbVals[row][col] = (255,255,255) if rgbVals[row][col] != (255,255,255) else (0,0,0)
new_im = rgbVals_to_image(rgbVals)
здесь это точнее
>>> from scipy import misc
>>> a = misc.imread("D:\\Downloads\\pic.jpg") # the image from your post
>>> #get the white(ish) cells
... mask = (a[0:20,:,0] > 160) & (a[0:20,:,1] > 160) & (a[0:20,:,1] > 160)
>>> a[0:20][mask] = [0,0,0] # make the white cells black
>>> a[0:20][~mask] = [255,255,255] # make the rest white
>>> misc.imsave('out.jpg',a)
Вывод не идеален: / (все 0:20 означают, что мы просто смотрим на первые 20 строк пикселей)