#python #spray #grayscale
#python #распыление #оттенки серого
Вопрос:
Я новичок в Python и начал пытаться запрограммировать код для анализа распыляемого изображения и построения «значения шкалы серого», чтобы увидеть рисунок распыления.
Некоторое время у меня есть этот код:
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
filepath = "flat2.jpg"
img = Image.open(filepath).convert('L')
WIDTH, HEIGHT = img.size
pix = img.load()
data = np.asarray(img.getdata())
data = data.reshape((HEIGHT,WIDTH))
fig,ax = plt.subplots()
reduced_data = data.mean(axis=0)
ax.plot(reduced_data)
plt.show()
Однако этот код анализирует все изображение, и мне нужна только определенная строка, например, строка 329 или что-то в этом роде. В качестве смягчения я тоже попытался обрезать изображение, но безуспешно.
Я пытаюсь выполнить код, подобный инструменту «построить профиль» на изображении J.
Очевидно, я просто «сделал» этот код с помощью некоторых пользователей здесь.
Комментарии:
1. Вы имеете в виду горизонтальную линию пикселей из изображения?
2. Да. Теперь я изменил заголовок. Спасибо
3. @ViniciusCarreira знаете ли вы, какая строка пикселя вас интересует? Вы хотите, чтобы это работало для любой ширины линии?
4.
img.crop((0, 329, WIDTH, 330))
затем снова сохранитеimg.save('temp.png')
прочитанноеimg=Image.open('temp.png')
? Но я считаю, что это можно сделать через nympy без сохранения временного файла.5. @DavidS Это может быть любая горизонтальная линия пикселей, например 329 или 150 и т.д. Я могу работать с любой шириной, но если я выберу только определенную ширину (например, просто спрей на изображении), возможно, будет лучше, но, вероятно, сложнее
Ответ №1:
Поскольку по прошествии нескольких часов никто не предоставил нам образец правильного эффективного решения, вот смягчение обрезки:
from PIL import Image
filepath = 'flat2.jpg'
img = Image.open(filepath).convert('L')
WIDTH, HEIGHT = img.size
LINE = 329 # <---- put here your desired line number
img = img.crop( (0, LINE, WIDTH, LINE 1 ) ).save('crop.png')
img = Image.open('crop.png')
# do stuff
# WIDTH, HEIGHT = img.size
# pix = img.load()
# etc
Это должно работать, но это совсем не правильное и эффективное решение. Я считаю, что это должно быть сделано через numpy
etc.
Что касается crop()
функции, это очень простая вещь. Он просто берет некоторую прямоугольную область (прямоугольник) из данного изображения. Четыре числа внутри скобок (x1, y1, x2, y2) являются кортежем координат этого поля. Верхний левый угол (x1, y1) нижний правый угол (x2, y2). Единственная возможная проблема заключается в том, что какая-либо из этих координат выходит за рамки размера изображения.
Комментарии:
1. Отлично, Юрий. Я сделал это через несколько часов, и это сработало хорошо. Сейчас я просто настраиваю график, например, пытаюсь сгладить линию и т. Д. Спасибо.