python - 使用 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.8opencv-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)
推荐阅读
- c# - 使用 LinqToSql 将数据从 sql 检索到 datagridview
- angularjs - 如何添加动态模板Url
- delphi - Zeoslib新版本编码问题,奇怪的字符
- reactjs - 使用相同组件的多条路线
- javascript - html2canvas 和 React 生成 pdf 不起作用
- python - 在 make 命令中传递参数
- join - 如何在 Cognos-11 中使用 exceptjoin?
- powershell - 如何将文件夹中的所有文件复制到另一个文件夹并更改扩展名?
- php - 使用复选框更新行但与其他按钮冲突
- appium - 如何在appium中添加清除系统文件