ExtractSURF总是返回相同的方向

2024-09-29 23:21:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是想开始学习OpenCV。我的理解是ExtractSURF应该返回0到360之间的角度。因为某些原因,关键点总是返回90的方向。有什么想法为什么?在

此代码:

import cv
image = cv.LoadImageM('lena.bmp', cv.CV_LOAD_IMAGE_GRAYSCALE)
(keypoints, descriptors) = cv.ExtractSURF(image, None, cv.CreateMemStorage(), (0, 6000, 1, 3))
for keypoint in keypoints:
    ((x, y), laplacian, size, dir, hessian) = keypoint
    print "x=%d y=%d laplacian=%d size=%f dir=%f hessian=%f" % (x, y, laplacian, size, dir, hessian)

退货

^{pr2}$

Tags: 代码imagesizedir原因方向opencvcv
1条回答
网友
1楼 · 发布于 2024-09-29 23:21:24

缺少_upright参数,该参数告诉OpenCV是否计算角度。所以我假设OpenCV决定只返回90度,如果不指定它。我不记得是否有方法在旧的cv接口中指定它。但是,在较新的cv2界面中,它非常简单:

import cv2

指定所需的曲面参数:

^{pr2}$

注意,将upright作为1传递将始终返回90的角度。在

构造SURF对象并读取图像:

surf = cv2.SURF(**surf_params)
image = cv2.imread('img.jpg', cv2.CV_LOAD_IMAGE_GRAYSCALE)
(keypoints, descriptors) = surf.detect(image, mask=None, useProvidedKeypoints=False)

for keypoint in keypoints:
    x,y = keypoint.pt
    size = keypoint.size 
    orientation = keypoint.angle
    response = keypoint.response 
    octave = keypoint.octave
    class_id = keypoint.class_id
    print (x,y), size, orientation

一个关于(x,y)、大小、方向的返回结果的示例:(我使用的是不同的图像)

(523.3077392578125, 933.419189453125) 156.0 199.023590088
(1417.82470703125, 957.7914428710938) 166.0 127.772354126
(1398.8065185546875, 971.0693359375) 165.0 126.83026123
(1009.0242309570312, 1032.0604248046875) 176.0 164.367050171

就这样。这就是为什么我总是建议人们切换到更新的cv2接口的原因之一。自从我做了这个转换,我就再也不用处理丢失参数之类的事情了。在

我希望这对你有帮助!在

相关问题 更多 >

    热门问题