Я работаю над основной задачей обработки изображений - выполнять матричные операции на основе пикселей с учетом формулы преобразования матрицы. Я читаю значения пикселей (дает мне 1 * 3 кортеж) из положения пикселя (x, y) на изображении и выполняю матричные операции, используя numpy, который возвращает значение numpy.ndarray, и, наконец, мне необходимо сохранить преобразованные значения пикселей в 2d матрице каждая (x, y) координата хранит вектор (1 * 3) преобразованного значения пикселя.
def colortrans(im):
#(X,Y,Z) = T + [M](*(RGB)(1*3 Vector)
# (X,Y,X) = (1*3 tuple)
# T = [0,128,128], (a 1*3 vector)
# M = (3*3 Matrix)
# RGB = (1*3 Vector)
pix = im.load()
x,y = im.size
ycc = []
#print(ycc.shape)
m1 = np.array([[0],[128],[128]])
print(type(m1))
m2 = np.array([[0.299,0.587,0.114],[-0.168736,-0.331264,0.5],[0.5,-0.418688,-0.081312]])
print(m2)
for i in range(x):
for j in range(y):
m = m1.T+np.dot(m2,np.array(pix[i,j]))
#print(m.shape)
#print(type(m))
ycc.append(m)
#ycc=np.array(ycc)
print(ycc[1:5])
mat_ycc = np.reshape(ycc,(x,y))
print(len(ycc))
print (x, y)
mat_ycc = np.reshape(ycc,(x,y))
return mat_ycc
Я хочу что-то вроде этого, формат, который можно преобразовать в изображение
[(180,128,128),(167,128,128) ... ]
Я понял (этот формат не позволяет мне изменить форму, так как dims не согласен)
[array([[180., 128., 128.]]), array([[167., 128., 128.]]), array([[157., 128., 128.]]), array([[178.772 , 127. , 128.162624]])]
Ошибка, которую я получаю
len(ycc) = 409600
Image size = 640*640
Я получаю ошибку:
ValueError: невозможно преобразовать массив размера 1228800 в форму (640 640)