【问题标题】:A bug causes crash when class inherit from cv2.KeyPoint当类从 cv2.KeyPoint 继承时,一个错误会导致崩溃
【发布时间】: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 如果我收到错误消息,我想发布它。但是程序崩溃没有任何错误信息。您可以尝试运行我的代码(请记住替换视频路径)。

标签: python opencv


【解决方案1】:

我似乎带着煤去纽卡斯尔。我不需要创建一个 T 类,只需使用 cv2.KeyPoint。

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

但我还是想知道是什么原因导致程序崩溃。

【讨论】:

    猜你喜欢
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多