【问题标题】:cv2.FeatureDetector_create('SIFT') causes segmentation faultcv2.FeatureDetector_create('SIFT') 导致分段错误
【发布时间】:2016-02-23 21:30:28
【问题描述】:

我将 opencv 2.4.11 和 python 2.7 用于计算机视觉项目。 我正在尝试获取 SIFT 描述符:

ima = cv2.imread('image.jpg')
gray = cv2.cvtColor(ima,cv2.COLOR_BGR2GRAY)

detector = cv2.FeatureDetector_create('SIFT') # or 'SURF' for that matter
descriptor = cv2.DescriptorExtractor_create('SIFT')

kpts = detector.detect(gray)

当调用最后一条指令时,它会抛出一个难看的分段错误。我必须使用 2.4.x 版本,因此不能选择上传到 3.x 版本的 opencv 以使用 SIFT 或 SURF 方法。我之前使用 sudo make uninstall 从 3.1 降级并从 0 安装了实际的 opencv 版本。

有人知道为什么会这样吗?

【问题讨论】:

  • 你是怎么安装的? (一些预建版本不包含非免费部分)
  • 我在我的机器上编译了它,来自 git 存储库

标签: python opencv


【解决方案1】:

试试:

import cv2

ima = cv2.imread('image.jpg')
gray = cv2.cvtColor(ima, cv2.COLOR_BGR2GRAY)

detector = cv2.SIFT()

kp1, des1 = detector.detectAndCompute(gray, None)

detector = cv2.FeatureDetector_create('SIFT') 也可以用于创建 SIFT 对象。

【讨论】:

  • 我遇到了同样的崩溃问题,但我应用了和你一样的代码......
【解决方案2】:

目前我是计算机科学的初学者,所以对我的简短解释表示歉意。 我有 OpenCV 3 和 Python 2.7.11 在我下载之前,不不,你最好阅读this site 毕竟你可以写这段代码(和你的代码几乎一样)。

import cv2
import numpy as np

img = cv2.imread('lenna.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

sift = cv2.xfeatures2d.SIFT_create()
detector = sift.detect(gray, None)

kpts, des = sift.compute(gray, detector)
# kpts,des=descriptor.compute(gray,kpts)
im_with_keypoints = cv2.drawKeypoints(gray, kpts, np.array([]), color=255, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

cv2.imshow("Keypoints", im_with_keypoints)
cv2.waitKey()

问候!

【讨论】:

    【解决方案3】:

    安装 opencv_contrib 使用

    pip install opencv-contrib-python
    

    那么你的代码就可以工作了。

    【讨论】:

      猜你喜欢
      • 2021-01-04
      • 1970-01-01
      • 2011-11-06
      • 2020-12-31
      • 2019-07-21
      • 2018-07-28
      • 2014-04-25
      • 2011-07-18
      • 2013-02-26
      相关资源
      最近更新 更多