2016-05-17 2 views
0

Я не уверен, что я сделал не так с этим кодом:Numpy: Установка элемента массива с последовательностью

import cv2 
from matplotlib import image as img 
import numpy as np 
from matplotlib import pyplot as plt 
from matplotlib.pyplot import axis 

img = cv2.imread('popi.png', 0) 
cv2.imshow('lel', img) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 
a = np.shape(img) 
iloscpixeli = a[0] * a[1] 
print(iloscpixeli) 
b = np.zeros((256, 1)) 
H = np.zeros((a[0], a[1])) 
# czest = np.zeros((256, 1)) 
# probf = np.zeros((256, 1)) 
# probc = np.zeros((256, 1)) 
# cum = np.zeros((256, 1)) 
dim = np.shape(img) 
wyjscie = np.zeros(dim) 
H = np.zeros(dim) 
print("dim", dim) 
czest = np.zeros(dim) 
probc = np.zeros(dim) 
# print("r",czest) 
probf = np.zeros(dim) 
cum = np.zeros(dim) 
for i in range(1, a[0]): 
    for j in range(1, a[1]): 
     wartosc = img[i, j] 
     czest[wartosc + 1] = (czest[wartosc + 1] + 1) 
     probf[wartosc + 1] = czest[wartosc + 1]/iloscpixeli 

suma = 0 
nobins = 255 
d = np.zeros((256, 1)) 
d1 = np.shape(d) 
d11 = d1[0] 

for i in range(1, d11): 
    suma = suma + czest[i] 
    cum[i] = suma 
    probc[i] = cum[i]/iloscpixeli 
    wyjscie[i] = np.around(probc[i] * nobins) 
wyjscie=wyjscie.tolist() 
for i in range(1, a[0]): 
    for j in range(1, a[1]): 
     H[i, j] = wyjscie[img[i,j] + 1] 

cv2.imshow('wyrownany', H) 

и эта линия (да последний: C):

H[i, j] = wyjscie[img[i,j] + 1] 

дает me error ValueError: установка элемента массива с последовательностью. Попытка отремонтировать проверено об изменении «wyjscie» из массива в список .. но не работает хорошо. Я ищу любую помощь. Это здорово, когда вы смотрите на код, я, возможно, сделать что-то глупое и ... но есть линия czest[wartosc + 1] = (czest[wartosc + 1] + 1) и она хорошо работает ...

+0

Какая форма или len() из 'wyjscie [img [i, j] + 1]'? Поскольку 'H' является 2d,' H [i, j] 'требует скалярного или единственного списка элементов или массива. – hpaulj

ответ

0
  • H является NumPy-массив с DTYPE = поплавок, как это по умолчанию. Это форма 2d
  • Вы хотите вставить wyjscie[img[i,j] + 1]
  • wyjscie себе является NumPy-массив с формой 2d
  • конвертировать wyjscie в список, но этот список будет вложенный список, так как оригинал тусклым является 2d
  • индексирования в вложенном списке, поэтому получить список и поместить этот список в ячейку, которая удерживает поплавок = положить последовательность/список в массив элемент ERROR
  • (вы польский :-D)
+0

Да, я и мой английский .. xD без комментариев. @sascha – Null0007

+0

Я не уверен, правильно ли я это понял, поэтому мне не нужно преобразовывать wyjscie в список? Что я должен делать? – Null0007

+0

wyjscie - это список после того, как вы конвертируете его в список раньше. Я точно не знаю, что вы делаете. Шаг .tolist() раньше, ну, мне это не нравится. Но с одним индексом в wyjscie вы получаете список/последовательность. Поэтому вам нужно второе индексирование или совершенно другой подход. Я рекомендую регулярное использование печати (тип (X)) и print (X.shape), если это массив numpy для целей отладки. Это поможет! – sascha

Смежные вопросы