我有一个使用
生成的关键点匹配列表path = "pdf\#{item.id}.pdf"
File.cp(upload.path, path)
我想根据匹配项从 bf = cv2.BFMatcher(cv2.NORM_L1,crossCheck=True)
matches = bf.match(des1,des2)
列表中过滤掉不相关的关键点。我尝试以这种方式使用kps1,kps2
,DMatch.trainIdx
字段:
DMatch.queryIdx
我最终这样做了:
new_kps1 = [kp if idx in match.trainIdx for idx,kp in enumerate(kps1) for match in matches]
这是否可能以某种方式在列表理解中?
答案 0 :(得分:1)
您可以使用Python习惯用法zip(*x)
将元组列表转换为列表元组。这样你最初只能记录元组:
x = [(kps1[m.trainIdx], kps2[m.queryIdx]) for m in matches]
ls1, ls2 = map(list, zip(*x))
你甚至可以把它放在一行,但代价是可读性:
ls1, ls2 = map(list, zip(*[(kps1[m.trainIdx], kps2[m.queryIdx]) for m in matches]))