A
A
Alex_Kuzen2021-12-18 18:22:32
Python
Alex_Kuzen, 2021-12-18 18:22:32

Why does numpy take only a thin strip of an image?

import numpy as np
from PIL import  Image


im = Image.open('IMG_7760.JPG')
a = np.asarray(im)
for bb in a:

    np.random.random((1,1,1)) * a


    im = Image.fromarray(bb)
    im.save('2222.JPG')
    print(bb)


61bdfbe3ccd3f588419884.jpeg

This image is taken and translated into a matrix array. But when saving, a very thin strip of the image is formed. How to fix ? And if I Specify numbers greater than 1 in np.random.random(( 3,3,3)) gives an error

Traceback (most recent call last):
File "C:\Users\AlexK\PycharmProjects\just_codding_for_self\main.py", line 10, in
np.random.random((3,3,3)) * a
ValueError: operands could not be broadcast together with shapes (3,3,3) (824,824,3)

Answer the question

In order to leave comments, you need to log in

1 answer(s)
V
Vindicar, 2021-12-18
@Vindicar

Wait, what kind of heresy are you even doing?

im = Image.open('IMG_7760.JPG')
a = np.asarray(im) # a - трёхмерный массив numpy (высота; ширина; каналы)

for bb in a: # перебираешь элементы по первому индексу (высоте), т.е. строки изображения
    np.random.random((1,1,1)) * a #умножаешь каждый элемент (кортеж RGB) строки на одно и то же случайное число
    #и всё. Полученное произведение выбрасывается за ненадобностью. Оригинальное значение ты не заменяешь ведь.
    im = Image.fromarray(bb) #*строку* превращаешь в объект PIL.Image
    im.save('2222.JPG') #и сохраняешь этот объект в файл
    print(bb) #и выводишь на экран

Python does exactly what you ask of it.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question