Как я могу определить количество белых, черных и серых пикселей на фигуре, нарисованной снова и снова? - PullRequest
0 голосов
/ 29 мая 2020

Я делаю программу для моделирования прохождения pl anet мимо звезды. В моей программе теперь есть кнопка "перемещение", которая перемещает pl anet при каждом нажатии. Мне понадобится метод для расчета количества белых, черных и серых пикселей на графике каждый раз, когда я нажимаю кнопку «Переместить». Я пытался найти решение, но безуспешно. Я знаю, как это сделать для сохраненных изображений, но в моем случае мне нужны значения несколько сотен раз, и я не могу этого сделать для нескольких сотен независимых изображений.

import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import math
from PIL import Image
from math import pi, cos, sin
import numpy as np
from matplotlib.patches import Ellipse
from matplotlib.widgets import Button

r_star = 696000
r_planet = 60000
mean = [5000000, 5000000]
meanx = 4000000
meany = 5000000
width = 2*int(r_planet) + 20000
height = 2*int(r_planet) - 14000
angle = 180
Tau = 0.10
inclination = 45


star = plt.Circle((mean), int(r_star), color = "white")
planet = plt.Circle((meanx,meany), int(r_planet), color = "black")
external_ring = mpl.patches.Ellipse(xy=[meanx, meany], width=width+120000, height=height+24000, angle = 180+angle, edgecolor='gray', lw=0.1, facecolor='grey')
inner_ring = mpl.patches.Ellipse(xy=[meanx, meany], width=width, height=height, angle = 180+angle, edgecolor='gray', lw=0.1, facecolor='white')



fig, ax = plt.subplots()
ax.set(xlim = (0, 10000000), ylim = (0, 10000000))
ax.set_ylabel("Million kilometers")
ax.set_xlabel("Million kilometers")
background = plt.fill_between((0, 10000000), 0, 10000000 ,color='black')
ax.add_artist(star)
ax.add_artist(external_ring)
ax.add_artist(inner_ring)
ax.add_artist(planet)
ax.set_aspect('equal')


button = Button(plt.axes([0.8, 0.025, 0.1, 0.04]), 'Move', color='g', hovercolor='0.975')

meanx2 = 4000000

def move(event):
    global meanx2
    meanx2 += 10000
    planet2 = plt.Circle((meanx2,meany), int(r_planet), color = "black")
    external_ring2 = mpl.patches.Ellipse(xy=[meanx2, meany], width=width+120000, height=height+24000, angle = 180+angle, edgecolor='gray', lw=0.1, facecolor='grey')
    inner_ring2 = mpl.patches.Ellipse(xy=[meanx2, meany], width=width, height=height, angle = 180+angle, edgecolor='gray', lw=0.1, facecolor='white')
    ax.add_artist(background), ax.add_artist(star), ax.add_artist(external_ring2), ax.add_artist(inner_ring2), ax.add_artist(planet2)



button.on_clicked(move)


plt.show()
...