当尝试进行 orb 检测时,检测程序崩溃了。

9

我正在尝试使用OpenCV创建一个基本的图像检测器。

我正在使用ORB,首先尝试打开一张图片,然后在图片中检测关键点。

这是我的代码:

import cv2
from cv2 import ORB

image1 = cv2.imread("original.jpg", cv2.IMREAD_GRAYSCALE)

orb = ORB()

# find the keypoints with ORB
kp = orb.detect(image1, None)

然而,当我运行我的代码时,程序崩溃并出现以下错误。
Process finished with exit code -1073741819 (0xC0000005)

我搜索了这个错误,发现这是一种内存访问违规(Memory Access Violation),但我不知道具体哪里出现了违规?


1
这个 bug 已经在一个月前被报告了,但我还没有找到一个有效的修复方法,即使有些人报告说在调用工作之前使用 cv2.ocl.setUseOpenCL(False) 对他们有效... - Alexandre Mazel
1个回答

18

我遇到了同样的错误。经过一些搜索,我发现使用ORB_create()而不是ORB()可以解决它。

来源:

matching error in ORB with opencv 3

outImage 错误修复,

https://github.com/opencv/opencv/issues/6487

代码:

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('extra/sample.jpg',0)

## ERROR
#orb = cv2.ORB()

## FIX
orb = cv2.ORB_create()

# find the keypoints with ORB
kp = orb.detect(img,None)


# compute the descriptors with ORB
kp, des = orb.compute(img, kp)

## ERROR
#img2 = cv2.drawKeypoints(img,kp,color=(0,255,0), flags=0)


## Use This or the one below, One at a time
#img2 = cv2.drawKeypoints(img, kp, None, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

img2 = cv2.drawKeypoints(img, kp, outImage = None, color=(255,0,0))

plt.imshow(img2),plt.show()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接