cv.filter2D返回类型错误
我的平台是 Mac OS X 10.6,我通过 homebrew 安装了 python 2.7.2 和 opencv。
我想用 cv.filter2D 来进行 Lanczos 重采样,这里是我的代码:
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
在 python 中我输入
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
似乎没有人遇到过这个问题?
1 个回答
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)