使用cv2.blur时,"系统错误:新样式的getargs格式,但参数不是元组"

Ant*_*ado 31 python opencv image-processing

我只是尝试使用cv2(opencv python绑定)将过滤器应用于图像.这是我的代码的样子:

im = cv2.imread('./test_imgs/zzzyj.jpg')
cv2.imshow('Image', cv2.blur(im, 2)
cv2.waitKey(0)
Run Code Online (Sandbox Code Playgroud)

它几乎是从文档中复制粘贴的.但是,它只是不起作用,没有比这条消息更多的痕迹:

SystemError: new style getargs format but argument is not a tuple
Run Code Online (Sandbox Code Playgroud)

GaussianBlur会出现相同的错误,但不会出现medianBlur错误.有什么想法吗?

Abi*_*n K 31

对于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()
Run Code Online (Sandbox Code Playgroud)

希望它能起作用!!!

  • @ThomasWeller 不是所有东西都除以模 1 吗? (2认同)

Ulf*_*lfR 12

当我有同样的问题,升级枕头2.8.14.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)
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)

这里的实际错误与异常中所述的内容无关.实际上,分配给数据的数据类型是错误的.在2.8.1这两个intfloat是有效的,所以像data[x,y]=1.0是有效的,而在4.1.0需要使用一个整数像任何这样:

data[x,y]=1
data[x,y]=int(1.0)
Run Code Online (Sandbox Code Playgroud)

因此,在上面的示例中foo可以重新定义为以下两个2.8.14.1.0.:

def foo(x,y): return int(round(1.0*x/(y+1)))
Run Code Online (Sandbox Code Playgroud)

  • 是的,这是我见过的最具误导性的错误信息之一 - 非常令人沮丧. (6认同)