2011-08-29 89 views
0

我的平臺是Mac OS X 10.6,通過自制軟件安裝python 2.7.2/opencv。 我想用cv.filter2D做的Lanczos重採樣,這裏是我的代碼:cv.filter2D返回TypeError

import cv 

src = cv.imread('img.jpg') 
dst = cv.CloneMat(src) 
kernel = cv.CreateMat(7, 7, cv.CV_32FC1) 

for i in range(-3, 4): 
    for j in range(-3, 4): 
     kernel[i+3, j+3] = L(i, 3) * L(j, 3) 

cv.filter2D(src, dst, kernel) 
cv.imshow(dst) 

我的問題是cv.filter2D。 如果我使用

cv.filter2D(src, dst, kernel) 

,這OpenCV的參考手冊中寫到,它會得到錯誤信息。

Traceback (most recent call last): 
    File "lanczos.py", line 27, in <module> 
    cv.filter2D(src, dst, kernel) 
TypeError: only length-1 arrays can be converted to Python scalars 

在蟒I型

cv.filter2D.__doc__ 

,故稱函數原型是

'filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]]) -> dst' 

如果我使用

cv.filter2D(src, -1, kernel, dst) 

代替,該錯誤消息成爲

Traceback (most recent call last): 
    File "lanczos.py", line 27, in <module> 
    cv.filter2D(src, 1 , kernel, dst) 
TypeError: <unknown> is not a numpy array 

好像沒有人遇到過這個問題嗎?

回答

3

什麼是你的OpenCV的版本,我的版本是:

>>> import cv2 as cv 
>>> cv.__version__ 
'$Rev: 4557 $' 

我可以用一個ndarray爲核心,並沒有需要爲結果創建一個空數組,filter2D()將返回一個新的ndarray。

import cv2 as cv 
import numpy as np 
src = cv.imread('img.jpg') 
kernel = np.ones((7,7), dtype=np.float)/49.0 
dst = cv.filter2D(src, -1, kernel) 
cv.imwrite("result.jpg", dst) 
+0

我沒有模塊名爲CV2,但我的簡歷.__ version__是「$修訂:3057 $」 我可以正確運行代碼,看來問題是內核格式 –

相關問題