Python нужно найти точки максимума на картинке
[![введите сюда описание изображения][2]][2]
У меня есть картинка и нужно на этой картинке найти точки максимума. Картинка чёрно-белая, пробегаемся по всем пикселям картинки и пушим в массив только пиксели чёрного цвета, использовал библиотеку pillow. Как найти точки максимума? Наведите в нужное руслом меня, какие библиотеки использовать и т.д. Нашёл все пиксели чёрного цвета(рис. 2) Ну и нашёл максимальную точку максимума(рис. 3)
from PIL import Image
from PIL import ImageDraw
import matplotlib.pyplot as plt
import requests
im = Image.open(requests.get('https://i1.wp.com/www.fotwaudio.com/wp-content/uploads/2016/07/noun_538697.jpg', stream=True).raw)
# im = Image.open("sin.jpg")
im = im.convert('RGB')
color_black = (0, 0, 0)
pixels_color_Black_array = []
for x in range(im.size[0]):
for y in range(im.size[1]):
if im.getpixel((x, y)) == color_black:
pixels_color_Black_array.append({'x': x, 'y': y})
pixels_color_Black_array
# print(pixels_color_Black_array)
max_point = pixels_color_Black_array[0]
for pixel in pixels_color_Black_array:
if pixel['y'] < max_point['y']:
max_point = pixel
print(max_point)
Ответы (1 шт):
Ну на той картинке, которая у вас по ссылке скачивается, нет осевой линии, поэтому максимумы можно определять просто по факту наличия чёрного цвета. И чтобы было красивее я ищу пока количество чёрных пикселов не перестаёт расти и потом закрашиваю в красный что нашёл. Вернее, я ищу даже не чёрные, а пикселы темнее средне-серого цвета:
max_y = []
max_val = 0
for y in range(im.size[0]):
s = sum(sum(im.getpixel((x, y))) < 256 * 1.5 for x in range(im.size[1]))
if s > 0:
if s > max_val:
max_y.append(y)
max_val = s
else:
break
for y in max_y:
for x in range(im.size[1]):
if sum(im.getpixel((x, y))) < 256 * 1.5:
im.putpixel((x, y), (255, 0, 0))
Что получилось:
