Python: вращать изображение без зависимости от библиотеки подушек? - PullRequest
0 голосов
/ 03 декабря 2018

Прежде всего, я на начальном уровне Python, с опытом работы чуть менее месяца.

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

Любая помощь будет признательна

Спасибо

РЕДАКТИРОВАТЬ: Чтобы уточнить, я буду использовать подушку, ноЯ сам буду создавать функции поворота и оттенков серого

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Вам нужно будет проанализировать изображение в виде матрицы, а затем поменять местами столбцы и строки.Это требует понимания линейной алгебры для оптимизации.И если вы попытаетесь сделать это грубо, вы будете ждать около 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
0 голосов
/ 03 декабря 2018

Подушка обеспечивает доступ к отдельным пикселям изображения, что может помочь вам достичь того, что вы хотите.Конечно, библиотечные функции, такие как rotate (), являются более быстрыми способами сделать это, но вы просто хотите изучить и изучить, что составляет половину удовольствия от программирования.

Вы можете создать новое изображение и затем получитьпиксель с определенной координатой.

im = Image.new('RGBA', (250, 250))
im.getpixel((0, 0))

getpixel() вернет кортеж информации о цвете, содержащий (красный, зеленый, синий, альфа) * ​​1007 *

Вы также можете циклически проходить изображениеи «положить» новый пиксель, используя тот же набор значений цвета.

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

Следующим визитом будет поиск методов компьютерной графики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...