Подтвердить что ты не робот

"Системная ошибка: новый стиль getargs, но аргумент не является кортежем" при использовании cv2.blur

Я просто пытаюсь применить фильтр к изображению, используя cv2, привязки python opencv. Вот как выглядит мой код:

im = cv2.imread('./test_imgs/zzzyj.jpg')
cv2.imshow('Image', cv2.blur(im, 2)
cv2.waitKey(0)

Он почти копирует и вставляет из документацию. Тем не менее, он просто не работает, без лишних следов, чем это сообщение:

SystemError: new style getargs format but argument is not a tuple

То же самое происходит с GaussianBlur, но не со срединным Blur. Любые мысли?

4b9b3361

Ответ 1

Для cv2.blur вам нужно указать ksize как набор двух элементов, например (2,2). Но для medianBlur достаточно ksize = 3. Он вычитает из него квадратное ядро.

Итак, сделайте код следующим образом:

im = cv2.imread('./test_imgs/zzzyj.jpg')
cv2.imshow('Image', cv2.blur(im, (3,3)))
cv2.waitKey(0)
cv2.destroyAllWindows()

Надеюсь, что это сработает!!!

Ответ 2

У меня такая же проблема, когда обновление подушки от 2.8.1 до 4.1.0.

Вот фрагмент кода примера, который генерирует исключение при запуске Pillow==4.1.0:

from PIL import Image
img = Image.new('RGBA', [100,100])
# An empty mask is created to later overlay the original image (img)
mask = Image.new('L', img.size, 255)
# Get transparency (mask) layer pixels, they will be changed!
data = mask.load()
# The function used later
def foo(x,y): return round(1.0*x/(y+1))
# Update all pixels in the mask according to some function (foo)
for x in range(img.size[0]):
    for y in range(img.size[1]):
        data[x,y] = foo(x,y)

Вывод:

Traceback (most recent call last):
  File "x.py", line 12, in <module>
    data[x,y] = foo(x,y)
SystemError: new style getargs format but argument is not a tuple

Фактическая ошибка здесь имеет ничего, чтобы сделать то, что указано в исключении. Фактически это тип данных, назначенных неверным данным. В 2.8.1 допустимы теги int и float, поэтому такие вещи, как data[x,y]=1.0, а в 4.1.0 вам нужно использовать целые числа, такие как любое из них:

data[x,y]=1
data[x,y]=int(1.0)

Итак, в приведенном выше примере foo может быть переопределено следующим образом: 2.8.1 и 4.1.0.:

def foo(x,y): return int(round(1.0*x/(y+1)))