cv.filter2D返回TypeError

时间:2011-08-29 07:58:45

标签: python opencv

我的平台是Mac OS X 10.6并通过自制软件安装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 个答案:

答案 0 :(得分: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)