#python #numpy #image-processing #valueerror
Вопрос:
Итак, я пытаюсь сделать бпф, и вот мой код
def fftImage(img_gray, rows, cols):
rPadded = cv2.getOptimalDFTSize(rows)
cPadded = cv2.getOptimalDFTSize(cols)
imgPadded = np.zeros((rPadded, cPadded), dtype=np.float32)
imgPadded[:rows, :cols] = img_gray
img_fft = cv2.dft(imgPadded, flags=cv2.DFT_COMPLEX_OUTPUT)
return img_fft
img_gray получается с помощью cv2.imread
img_gray = cv2.imread("/content/hinh1.jpg")
# 1.fast Fourier transform
rows, cols = img_gray.shape[:2]
img_fft = stdFftImage(img_gray, rows, cols)
def stdFftImage(img_gray, rows, cols):
fimg = np.copy(img_gray)
fimg = fimg.astype(np.float32) #Notice the type conversion here
# 1.Image matrix times(-1)^(r c), Centralization
for r in range(rows):
for c in range(cols):
if (r c) % 2:
fimg[r][c] = -1 * img_gray[r][c]
img_fft = fftImage(fimg, rows, cols)
return img_fft
И ошибка в том, что
----> img_fft = stdFftImage(img_gray, rows, cols)
---> imgPadded[:rows, :cols] = img_gray
ValueError: could not broadcast input array from shape (480,640,3) into shape (480,640)
Итак, как мне исправить эту простую ошибку? Спасибо, я новичок.
Ответ №1:
Количество элементов во входном массиве должно быть равно элементам выходного массива. например, если вы преобразуете трехмерное изображение из формы (480 640,3) в 2-мерное изображение, ваша выходная форма может быть (1440 640) или что-то в этом роде. Другими словами, 480 640 3 должно быть равно (a,b), которое herr, a amp; b может быть 1440 и 640 соответственно. Я надеюсь, что смогу вам помочь.