signal.medfilt2d получает ValueError: объект слишком глубокий для нужного массива - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь получить фон зашумленного изображения на основе этого кода https://www.kaggle.com/rdokov/background-removal

Но я получаю ValueError. Как решить эту проблему?

import glob
import cv2
from scipy import signal
import numpy as np
a = cv2.imread(glob.glob('lp_train/*.jpg')[0])
import matplotlib.pyplot as plt
a2 = np.asarray(a)/255.
aa = signal.medfilt2d(a2, 11)
plt.imshow(aa)
plt.show()

Ошибка: ValueError: объект слишком глубокий для нужного массива

1 Ответ

0 голосов
/ 07 апреля 2020

.jpg имеет 3 канала, поэтому вы отправляете трехмерный массив, но medfilt2d принимает массив 2d.

Это можно решить двумя способами.

  1. Просто читайте как оттенки серого изображение
import glob
import cv2
from scipy import signal
import numpy as np
a = cv2.imread(glob.glob('lp_train/*.jpg')[0], 0)  # grayscale, single channel
import matplotlib.pyplot as plt
a2 = np.asarray(a)/255.
aa = signal.medfilt2d(a2, 11)
plt.imshow(aa)
plt.show()
Возьмите определенный c канал (R / G / B)
import glob
import cv2
from scipy import signal
import numpy as np
a = cv2.imread(glob.glob('lp_train/*.jpg')[0])
import matplotlib.pyplot as plt
a2 = np.asarray(a)/255.
aa = signal.medfilt2d(a2[:,:,0], 11) # a specific channel
plt.imshow(aa)
plt.show()

Оба должны работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...