当类继承自cv2.KeyPoint

时间:2019-07-15 07:25:49

标签: python opencv

查看以下代码:

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的释放模块,因此会导致内存泄漏。这只是我的猜测,我不知道如何解决。有人可以给我一些建议吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

我似乎把煤运到纽卡斯尔。我不需要创建T类,只需使用  cv2.KeyPoint。

T(tuple(coor))替换为cv2.KeyPoint(x=coor[0], y=coor[1], _size=0)

但是我仍然想知道导致程序崩溃的原因。