Вы можете использовать нижележащий цвет с изображения, чтобы проверить, равны ли ваши очки git.
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
def bBoxPointToColor(px,w,h,BBox,point):
row = int(((BBox[3]-point[1])/(BBox[3]-BBox[2]))*h)
col = int(((point[0]-BBox[0])/(BBox[1]-BBox[0]))*w)
return sum(abs(k[0]-k[1]) for k in zip(px[col,row],(159, 214, 255))) < 10
def point_generator(number,BBox):
img = Image.open('Chicago.jpg')
px = img.load()
xlist,ylist = [], []
for i in range(number):
x = np.random.uniform(BBox[0],BBox[1])
y = np.random.uniform(BBox[2],BBox[3])
while bBoxPointToColor(px,img.width,img.height,BBox,[x,y]):
x = np.random.uniform(BBox[0],BBox[1])
y = np.random.uniform(BBox[2],BBox[3])
xlist.append(x); ylist.append(y)
return(xlist,ylist)
BBox = ((-89.541239, -87.541239,
40.773460, 42.498943))
im = plt.imread('Chicago.jpg')
fig, ax = plt.subplots(figsize = (15,15))
ax.set_xlim(BBox[0],BBox[1])
ax.set_ylim(BBox[2],BBox[3])
xs,ys = point_generator(1500,BBox)
plt.plot(xs,ys, '.b')
ax.imshow(im, zorder=0, extent = BBox, aspect= 'equal',alpha=0.5)
plt.show()
. Вы можете видеть, что проблема заключается в том, что там, где над водой есть метка, точка обозначена на этикетке ... Но преимущество в том, что при таком подходе вам не нужно создавать пользовательскую геометрию для новых участков карты.