带OpenCV的退出代码-1073741819(0xC0000005)



我正在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-python4.4.0.44。

如果您查看文档,它应该是SIFT_create()

sift = cv2.SIFT_create()
print(sift)
kp = sift.detect(img1_gray, None)

但是,你为什么要用plt.imread阅读图像?

我问的原因是,您正在使用BGR2GRAY转换为灰度级。但plt.imreadRGB格式返回图像。因此,如果要使用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)

相关内容

最新更新