与FLANN匹配时出现OpenCV错误

时间:2018-08-30 12:03:26

标签: python opencv flann

我有一段代码用于匹配影片剪辑和参考图像之间的功能。通常它工作良好,但有时会在剪辑中间引发错误。由于它总是在相同的剪辑中,并且同时,我想它尝试分析的帧有问题。

我的代码:

email

在剪辑播放过程中有时会引发的错误:

 cap = cv2.VideoCapture(clip_file)
 img1 = cv2.imread(ref_image,0)

 while(cap.isOpened()):

    # read the frame and convert to gray-scale
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Initiate ORB detector
    orb = cv2.ORB_create()

    # find the keypoints and descriptors with ORB
    kp1, des1 = orb.detectAndCompute(img1,None)
    kp2, des2 = orb.detectAndCompute(gray,None)

    # FLANN parameters
    FLANN_INDEX_LSH = 6
    index_params= dict(algorithm = FLANN_INDEX_LSH,
                table_number = 6, # 12
                key_size = 12,     # 20
                multi_probe_level = 1) #2
    search_params = dict(checks=50)   # or pass empty dictionary

    flann = cv2.FlannBasedMatcher(index_params,search_params)

    matches = flann.knnMatch(des1,des2,k=2)
    cv2.imshow('img3',frame)

任何引起错误的建议将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

我认为错误是由于您的视频帧未检测到原始功能模板的痕迹引起的。检查每个帧的匹配中间结果是什么,然后如果是原因,则更改FLANN的参数,或者在错误发生之前直接跳过那些帧。

答案 1 :(得分:0)

您具有以下条件:

matches = flann.knnMatch(des1,des2,k=2)

使用k=2意味着每个元素都需要具有2个最近邻居。结果,每个描述符列表都需要具有两个以上的元素:

if(des1 is not None and len(des1)>2 and des2 is not None and len(des2)>2):
   matches = flann.knnMatch(des1,des2,k=2)

k-nearest neighbors algorithm