cv2.SIFT导致分段错误

问题描述

我在树莓派3b上使用opencv 4.5.0-pre和python 3.7.3。我正在尝试找到使用SIFT进行图像拼接的最佳匹配功能。我使用本指南https://www.pyimagesearch.com/2019/09/16/install-opencv-4-on-raspberry-pi-4-and-raspbian-buster/从源代码构建了opencv。

import cv2

img1 = cv2.imread('image1.jpg')
gray1 = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
img2 = cv2.imread('image2.jpg')
gray2 = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)

sift = cv2.SIFT()
kp1,des1 = sift.detectAndCompute(gray1,None)
kp2,des2 = sift.detectAndCompute(gray2,None)

在运行脚本时会引发以下错误

/bin/bash: line 1:  1101 Segmentation fault      python3 stitch_imgs.py

shell returned 139

Press ENTER or type command to continue 

我已经尝试使用cv2.xfeatures2d.SIFT_create()作为@Ahx建议使用。但这对我也不起作用。我得到以下输出

[ WARN:0 ] global /home/pI/Opencv_contrib/modules/xfeatures2d/misc/python/shadow_shift.hpp
(15) SIFT_create DEPRECATED: cv.xfeatures2d.SIFT_create() is deprecated due to 
the main repository. https://github.com/opencv/opencv/issues/16736

Killed

有人知道我该如何解决吗?

谢谢

解决方法

documentation1documentation2中,您需要声明SIFT,如下所示:

对于opencv-4.0.0

sift = cv2.xfeatures2d.SIFT_create()

对于opencv-4.5-0-pre

sift = cv2.SIFT_create()

对于opencv-4.0.0代码:


import cv2

img1 = cv2.imread('img1.jpg')
gray1 = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
img2 = cv2.imread('img2.jpg')
gray2 = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)

sift = cv2.xfeatures2d.SIFT_create()
kp1,des1 = sift.detectAndCompute(gray1,None)
kp2,des2 = sift.detectAndCompute(gray2,None)

对于opencv-4.5.0-pre代码:

import cv2

img1 = cv2.imread('img1.jpg')
gray1 = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)

sift = cv2.SIFT_create()
kp1,None)