Ошибка значения: не удалось передать входной массив из формы (480 640,3) в форму (480 640)

#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 соответственно. Я надеюсь, что смогу вам помочь.