【发布时间】:2019-07-15 07:25:49
【问题描述】:
看这段代码:
import numpy as np
import cv2
class T(cv2.KeyPoint):
def __init__(self, pt):
super().__init__()
self.pt = pt
def calculate_corners(A):
A_gray = cv2.cvtColor(A, cv2.COLOR_BGR2GRAY)
pa = cv2.goodFeaturesToTrack(A_gray, maxCorners=100, qualityLevel=0.01, minDistance=15)
pa = np.squeeze(pa)
kpa = []
for coor in pa:
kpa.append(T(tuple(coor)))
return kpa
cap = cv2.VideoCapture("E:\\video\\test.mp4")
while True:
frame = cap.read()[1]
if frame is None:
break
kpa = calculate_corners(frame)
frame_corner = cv2.drawKeypoints(frame, kpa, outImage=None, color=(255, 0, 125))
cv2.imshow('frame_corner', frame_corner)
cv2.waitKey(1)
cv2.destroyAllWindows()
cap.release()
这段代码会在我的系统中崩溃(Windows10, python3.7.3, opencv4.1.0)
经过测试,我确定这是T类造成的。我猜T类没有继承cv2.KeyPoint的release moudle,所以会导致内存泄漏。这只是我的猜想,我不知道如何解决它。谁能给我一些建议?非常感谢!
【问题讨论】:
-
@furas 如果我收到错误消息,我想发布它。但是程序崩溃没有任何错误信息。您可以尝试运行我的代码(请记住替换视频路径)。