import cv2
img1 = cv2.imread('imref/ref-DN.png',0) # queryImage
# Initiate SIFT detector
sift = cv2.SIFT()
# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img1,None)
print("end")
输出它,en:
Errore di segmentazione (core dump creato)
Segmentation error (core dump created)
我的linux kubuntu 18.04lts桌面有32gb的ram
其他代码工作良好,但不筛选
cat /proc/meminfo
MemTotal: 32776404 kB
MemFree: 29683128 kB
MemAvailable: 31038428 kB
此处所附图像为2k(61x54)像素
为什么会这样?谢谢大家 cv2.__version__
-> '4.5.1'
多亏了alkasm
sift = cv2.SIFT_create()
解决了我的问题
1条答案
按热度按时间pgccezyw1#
opencv中的特征检测器应该使用它们的静态
create
方法。在api引用中不使用构造函数是不明确的,但是您可以在文档中看到SIFT
那个班级create()
方法是唯一显示的方法(它们显示相应的python调用是SIFT_create()
).之所以有必要这样做,是因为opencv
Algorithm
类别(哪个Feature2D
是的子类)使用pimpl习惯用法实现,以便SIFT
实际上是一个不打算直接示例化的基类/虚拟类;相反SIFT::create
返回一个SIFT_Impl
示例,如代码中所示。python绑定可能会在将来的某个时候被“修复”以缓解这个问题,但是在此之前,您需要使用SIFT_create()
,BRISK_create()
,依此类推。还要注意的是
SIFT.create()
以及BRISK.create()
等等是有效的生成名称,它们是等价的,但是您会发现下划线版本在教程和人们的项目中更为常见,而且它们目前是明确记录的。