我正在Python中尝试一个非常简单的OpenCV示例,但它对我来说完全不起作用:
import cv2
import matplotlib.pyplot as plt
if __name__ == '__main__':
img1 = plt.imread('../data/input/frame000013.png')
img2 = plt.imread('../data/input/frame000014.png')
img1_gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
sift = cv2.SIFT()
print(sift)
kp = sift.detect(img1_gray, None)
print(kp)
如果我尝试用PyCharm运行它,我会得到以下错误:
Process finished with exit code -1073741819 (0xC0000005)
如果我试图通过终端执行它,它似乎不会超过kp = sift.detect(img1_gray, None)
行,也不会真正到达第二个print
语句,而不会提供任何错误通知。
我使用:Windows 10,Python 3.8,opencv-python
&opencv-contrib-python
4.4.0.44。
如果您查看文档,它应该是SIFT_create()
。
sift = cv2.SIFT_create()
print(sift)
kp = sift.detect(img1_gray, None)
但是,你为什么要用plt.imread
阅读图像?
我问的原因是,您正在使用BGR2GRAY
转换为灰度级。但plt.imread
以RGB
格式返回图像。因此,如果要使用plt.imread
:
import cv2
import numpy as np
import matplotlib.pyplot as plt
def rgb2gray(rgb):
return np.dot(rgb[..., :3], [0.2989, 0.5870, 0.1140]).astype(np.uint8)
if __name__ == '__main__':
img1 = plt.imread('../data/input/frame000013.png')
img2 = plt.imread('../data/input/frame000014.png')
img1_gray = rgb2gray(img1)
sift = cv2.SIFT_create()
print(sift)
kp = sift.detect(img1_gray, None)
print(kp)
或者如果您选择cv2.imread
:
import cv2
import matplotlib.pyplot as plt
if __name__ == '__main__':
img1 = cv2.imread('../data/input/frame000013.png')
img2 = cv2.imread('../data/input/frame000014.png')
img1_gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
sift = cv2.SIFT_create()
print(sift)
kp = sift.detect(img1_gray, None)
print(kp)