Прежде всего, я нахожусь на уровне новичка в питоне с опытом чуть меньше месяца.
Я пишу простую программу как часть проекта, в котором две мои основные цели - создать с нуля функцию, которая переворачивает и поворачивает изображение, и другую функцию, которая существенно изменяет значение RGB изображения (например, делает изображение в оттенках серого). Пользователю будет предложено выбрать один из эффектов для применения к изображению. У меня уже установлена подушка, нужны ли мне другие библиотеки? Я хочу знать, как я могу создать их с нуля.
Любая помощь будет оценена
Спасибо
Обновлено: Чтобы уточнить, я буду использовать подушку, но я сам буду создавать функции поворота и шкалы серого
Я предполагаю, что вы вообще не хотите использовать подушку, даже чтобы просто читать и записывать отдельные значения пикселей. С какими форматами изображений вы хотите, чтобы ваша программа работала? bmps довольно легко манипулировать вручную, поскольку они более или менее представляют собой сетку битовых значений. Более популярные форматы, такие как jpeg, png и gif, значительно сложнее. Рассмотрите возможность проверки страниц википедии для каждого из них, чтобы получить краткое изложение того, как их данные представлены в памяти.
Я предполагаю, что вы все еще импортируете свое изображение с подушкой и хотите просто научиться делать вращения, используя свои собственные функции для практики. Однако я думаю, вам нужно предоставить больше информации. Вы спрашиваете, как делать произвольные повороты или как вращать с шагом 90 градусов? Кроме того, какую часть алгоритма вращения вы не понимаете, как реализовать в Python? У вас есть код от ваших попыток? Вы уже искали какие-нибудь алгоритмы поворота? Видите ли, есть гораздо больше информации, которую вы действительно должны включить в свой вопрос, поскольку это довольно неоднозначно.
Мне нужно сделать это с нуля, чтобы продемонстрировать свое понимание Python в рамках задания в колледже. Я думаю, мне поможет взгляд на исходный код, но мне нравится, что я сказал, что у меня очень мало опыта в программировании - я даже не знаю, как это сделать. Мне просто нужно вращение с шагом 90 градусов. Для записи, я еще не пробовал, я надеялся, что узнаю, как это начать, получив помощь здесь.
Похоже, что мы с Дэвисом здесь исходим из разных предположений, и это приводит к очень разным интерпретациям вашего вопроса. Вы можете уточнить? Вы пытаетесь написать программу, которая вообще не использует Pillow, или вы хотите использовать все Pillow, за исключением конкретных методов, которые поворачивают изображения и меняют их на оттенки серого?
Ах да, я использую подушку, так что последнее из того, что вы сказали, верно.
Помощь в начало в проекте - это не то, в чем stackoverflow особенно хорош. Возможно, вам повезет, если вы начнете с любого дискуссионного форума по онлайн-программированию, а затем вернетесь сюда, когда у вас возникнут конкретные вопросы в стиле «почему это не работает».
В дальнейшем нужно показать, что вы пробовали. И вам нужно объяснить, где у вас проблемы. Я решил эту "проблему" отсутствия библиотеки подушек при 20-секундном поиске в Google, исходя из предоставленных вами критериев.






Подушка обеспечивает доступ к отдельным пикселям изображения, что может помочь вам достичь желаемого. Конечно, библиотечные функции, такие как rotate (), - более быстрые способы сделать это, но вы просто хотите изучить и изучить, что составляет половину удовольствия от программирования.
Вы можете создать новое изображение, а затем получить пиксель в определенной координате.
im = Image.new('RGBA', (250, 250))
im.getpixel((0, 0))
getpixel() вернет кортеж информации о цвете, содержащий (красный, зеленый, синий, альфа)
Вы также можете перебрать изображение и «поставить» новый пиксель, используя тот же кортеж значений цвета.
for x in range(200):
for y in range(30):
im.putpixel((x, y), (250, 0, 250))
Вы можете сохранить свое изображение, когда закончите.
im.save('myImage.png')
Поворот с шагом 90 градусов очень просто, вы можете просто поменять местами значения x и y в пикселях.
for x in range(200):
for y in range(200):
p = sourceImage.getpixel(x,y) # copy a pixel
targetImage.getpixel(y,x,p) # put it in the new image, rotated 90 deg
Ваш следующий визит будет заключаться в изучении техники компьютерной графики.
Вам нужно будет проанализировать изображение как матрицу, а затем поменять местами столбцы и строки. Это требует понимания линейной алгебры для оптимизации. И если вы попытаетесь использовать грубую силу, вы будете ждать около 30 минут, чтобы повернуть каждое изображение (было там, сделал это).
Вот взгляд на вращение на месте. Суть программы:
# Python3 program to rotate a matrix by 90 degrees
N = 4
# An Inplace function to rotate
# N x N matrix by 90 degrees in
# anti-clockwise direction
def rotateMatrix(mat):
# Consider all squares one by one
for x in range(0, int(N/2)):
# Consider elements in group
# of 4 in current square
for y in range(x, N-x-1):
# store current cell in temp variable
temp = mat[x][y]
# move values from right to top
mat[x][y] = mat[y][N-1-x]
# move values from bottom to right
mat[y][N-1-x] = mat[N-1-x][N-1-y]
# move values from left to bottom
mat[N-1-x][N-1-y] = mat[N-1-y][x]
# assign temp to left
mat[N-1-y][x] = temp
# Function to pr the matrix
def displayMatrix( mat ):
for i in range(0, N):
for j in range(0, N):
print (mat[i][j], end = ' ')
print ("")
mat = [[0 for x in range(N)] for y in range(N)] # Driver Code
# Test case 1
mat = [ [1, 2, 3, 4 ],
[5, 6, 7, 8 ],
[9, 10, 11, 12 ],
[13, 14, 15, 16 ] ]
'''
# Test case 2
mat = [ [1, 2, 3 ],
[4, 5, 6 ],
[7, 8, 9 ] ]
# Test case 3
mat = [ [1, 2 ],
[4, 5 ] ]
'''
rotateMatrix(mat)
displayMatrix(mat) # Print rotated matrix
# This code is contributed by saloni1297
«Я хочу знать, как я могу создать их с нуля» - почему? Библиотеки предназначены для того, чтобы предоставлять хорошо протестированные, многократно используемые функции, используя преимущества сообщества, а не только ваши собственные усилия. Возможно, вы недооцениваете количество кода в Pillow. (Не стесняйтесь читать исходный код. Это поможет вам понять, что делает библиотека, а также ее размер, и может дать вам представление о том, как вы могли бы создать новую библиотеку, если вы все еще хотите.)