2012-11-05 41 views
21

我只是想使用cv2,opencv python綁定應用過濾器到圖像。這裏是我的代碼如下所示:「系統錯誤:新風格getargs格式,但參數不是元組」當使用cv2.blur

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

這幾乎是複製和粘貼從documentation。然而,它只是不工作,沒有比這個消息的詳細跟蹤:用高斯模糊發生

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

同樣的錯誤,但不與medianBlur。有什麼想法嗎?

回答

21

對於cv2.blur,您需要將ksize作爲兩個元素的元組,如(2,2)。但是對於中值Blur,ksize = 3就足夠了。它會從中扣除一個方形內核。

所以讓這樣的代碼:

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

希望這將工作!

+0

(2,2)不起作用它需要的東西,分模1 –

6

我有同樣的問題,當升級枕頭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) 

輸出:

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))) 
+1

是的,一個最誤導性的錯誤信息我見過 - 相當令人沮喪。 – Simon

相關問題