Python: повернуть изображение независимо от библиотеки подушек?

Прежде всего, я нахожусь на уровне новичка в питоне с опытом чуть меньше месяца.

Я пишу простую программу как часть проекта, в котором две мои основные цели - создать с нуля функцию, которая переворачивает и поворачивает изображение, и другую функцию, которая существенно изменяет значение RGB изображения (например, делает изображение в оттенках серого). Пользователю будет предложено выбрать один из эффектов для применения к изображению. У меня уже установлена ​​подушка, нужны ли мне другие библиотеки? Я хочу знать, как я могу создать их с нуля.

Любая помощь будет оценена

Спасибо

Обновлено: Чтобы уточнить, я буду использовать подушку, но я сам буду создавать функции поворота и шкалы серого

«Я хочу знать, как я могу создать их с нуля» - почему? Библиотеки предназначены для того, чтобы предоставлять хорошо протестированные, многократно используемые функции, используя преимущества сообщества, а не только ваши собственные усилия. Возможно, вы недооцениваете количество кода в Pillow. (Не стесняйтесь читать исходный код. Это поможет вам понять, что делает библиотека, а также ее размер, и может дать вам представление о том, как вы могли бы создать новую библиотеку, если вы все еще хотите.)

Chris 03.12.2018 21:16

Я предполагаю, что вы вообще не хотите использовать подушку, даже чтобы просто читать и записывать отдельные значения пикселей. С какими форматами изображений вы хотите, чтобы ваша программа работала? bmps довольно легко манипулировать вручную, поскольку они более или менее представляют собой сетку битовых значений. Более популярные форматы, такие как jpeg, png и gif, значительно сложнее. Рассмотрите возможность проверки страниц википедии для каждого из них, чтобы получить краткое изложение того, как их данные представлены в памяти.

Kevin 03.12.2018 21:16

Я предполагаю, что вы все еще импортируете свое изображение с подушкой и хотите просто научиться делать вращения, используя свои собственные функции для практики. Однако я думаю, вам нужно предоставить больше информации. Вы спрашиваете, как делать произвольные повороты или как вращать с шагом 90 градусов? Кроме того, какую часть алгоритма вращения вы не понимаете, как реализовать в Python? У вас есть код от ваших попыток? Вы уже искали какие-нибудь алгоритмы поворота? Видите ли, есть гораздо больше информации, которую вы действительно должны включить в свой вопрос, поскольку это довольно неоднозначно.

Random Davis 03.12.2018 21:18

Мне нужно сделать это с нуля, чтобы продемонстрировать свое понимание Python в рамках задания в колледже. Я думаю, мне поможет взгляд на исходный код, но мне нравится, что я сказал, что у меня очень мало опыта в программировании - я даже не знаю, как это сделать. Мне просто нужно вращение с шагом 90 градусов. Для записи, я еще не пробовал, я надеялся, что узнаю, как это начать, получив помощь здесь.

Mohammed Eita 03.12.2018 21:24

Похоже, что мы с Дэвисом здесь исходим из разных предположений, и это приводит к очень разным интерпретациям вашего вопроса. Вы можете уточнить? Вы пытаетесь написать программу, которая вообще не использует Pillow, или вы хотите использовать все Pillow, за исключением конкретных методов, которые поворачивают изображения и меняют их на оттенки серого?

Kevin 03.12.2018 21:27

Ах да, я использую подушку, так что последнее из того, что вы сказали, верно.

Mohammed Eita 03.12.2018 21:33

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

lvc 03.12.2018 21:47

В дальнейшем нужно показать, что вы пробовали. И вам нужно объяснить, где у вас проблемы. Я решил эту "проблему" отсутствия библиотеки подушек при 20-секундном поиске в Google, исходя из предоставленных вами критериев.

T.Woody 03.12.2018 21:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
8
3 194
2

Ответы 2

Подушка обеспечивает доступ к отдельным пикселям изображения, что может помочь вам достичь желаемого. Конечно, библиотечные функции, такие как 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

Другие вопросы по теме