在python opencv中使用drawKeypoints会产生错误:'module'对象没有属性'drawKeypoints'

时间:2014-10-22 01:38:05

标签: python opencv sift

这是我正在使用的代码:

import cv2
import cv
im=cv2.imread("box.png")
gr=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
d=cv2.FeatureDetector_create("SIFT")
kp=d.detect(gr)
imm=cv2.drawKeypoints(im, kp)#[, outImage[, color[, flags]]])
# io.imshow(gr)

但是我收到的错误是cv2没有drawKeypoints。我自己查了一下:

d=dir(cv2)
if "drawKeypoints" in d: 
  print 'yes'
else: 
  print 'no'

并发现它确实没有。是否有任何替代功能要使用,还是与版本相关的问题?

2 个答案:

答案 0 :(得分:3)

我不确定版本问题,但是我运行的是OpenCV 2.4.11,而cv2.drawKeypoints()在我执行之后可用:

import cv2

如果仍然无法使用它,您可以使用common.py示例代码中的替代方法:

def draw_keypoints(vis, keypoints, color = (0, 255, 255)):
    for kp in keypoints:
            x, y = kp.pt
            cv2.circle(vis, (int(x), int(y)), 2, color)

我希望这会有所帮助。

答案 1 :(得分:0)

对于python 3.5,我必须将输出图像变量作为第三个参数放到函数中。