Мне интересно, почему вы вообще используете PIL, особенно ваш исходный код основан на OpenCV, и вам все равно нужно обрабатывать NumPy массивов.
Это было бы моим решением:
import cv2
import numpy as np
# Read input image; create additional output image to draw on
image = cv2.imread('ZsyOG.png')
image_out = image.copy()
# Parameters
step = 64
cols, rows = image.shape[:2]
# Actual processing in loop
i_region = 0
for row in np.arange(0, rows, step):
for col in np.arange(0, cols, step):
mean = cv2.mean(image[row:row+step, col:col+step])
image_out = cv2.rectangle(img=image_out,
pt1=(row, col),
pt2=(row + step, col + step),
color=(255, 255, 255),
thickness=1)
image_out = cv2.putText(img=image_out,
text=str(i_region),
org=(int(col+1/2*step), int(row+1/2*step)),
fontFace=cv2.FONT_HERSHEY_COMPLEX_SMALL,
fontScale=1.0,
color=(255, 255, 255))
print('Region: ', i_region, '| Mean: ', mean)
i_region += 1
cv2.imshow('image_out', image_out)
cv2.waitKey(0)
cv2.destroyAllWindows()
Вывод изображения:
Вывод на печать:
Region: 0 | Mean: (0.0, 0.0, 255.0, 0.0)
Region: 1 | Mean: (0.0, 0.0, 255.0, 0.0)
Region: 2 | Mean: (0.0, 255.0, 255.0, 0.0)
Region: 3 | Mean: (0.0, 255.0, 255.0, 0.0)
Region: 4 | Mean: (0.0, 0.0, 255.0, 0.0)
Region: 5 | Mean: (0.0, 0.0, 255.0, 0.0)
Region: 6 | Mean: (0.0, 255.0, 255.0, 0.0)
Region: 7 | Mean: (0.0, 255.0, 255.0, 0.0)
Region: 8 | Mean: (0.0, 0.0, 0.0, 0.0)
Region: 9 | Mean: (0.0, 0.0, 0.0, 0.0)
Region: 10 | Mean: (255.0, 0.0, 0.0, 0.0)
Region: 11 | Mean: (255.0, 0.0, 0.0, 0.0)
Region: 12 | Mean: (0.0, 0.0, 0.0, 0.0)
Region: 13 | Mean: (0.0, 0.0, 0.0, 0.0)
Region: 14 | Mean: (255.0, 0.0, 0.0, 0.0)
Region: 15 | Mean: (255.0, 0.0, 0.0, 0.0)
Надеюсь, что поможет!
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.8.1
NumPy: 1.18.1
OpenCV: 4.2.0
----------------------------------------