使用cv2.blur时出现“系统错误:新样式的getargs格式,但参数不是元组”
image-processing
opencv
python
5
0

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

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,会发生相同的错误,但与MidBlur不会发生。有什么想法吗?

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

对于cv2.blur,您需要给ksize作为两个元素的元组,如(2,2)。但是对于midBlur,ksize = 3就足够了。它将从中扣除平方核。

因此,使代码如下所示:

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

希望它能工作!!!

收藏
评论

将枕头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.1intfloat都是有效的,因此data[x,y]=1.0是有效的,而在4.1.0需要使用类似以下任何一种的整数:

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

因此,在上面的示例中,可以将foo重新定义为以下内容,以使其在2.8.14.1.0中均可使用:

def foo(x,y): return int(round(1.0*x/(y+1)))
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号