python - 与 FLANN 进行特征匹配时出现 OpenCV 错误

标签 python opencv flann

我有一段代码用于匹配影片剪辑和引用图像之间的特征。它通常运行良好,但有时会在剪辑中间抛出错误。因为它总是在同一个片段中,而且在同一时间,我猜它试图分析的帧有问题。

我的代码:

 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)

播放片段时有时会抛出的错误:

Traceback (most recent call last):
 File "movie_test.py", line 81, in <module>
flann_movie('data/movie.avi','data/ref.jpg')
 File "movie_test.py", line 35, in flann_movie
matches = flann.knnMatch(des1,des2,k=1)
 cv2.error: OpenCV(3.4.2) C:\projects\opencv- 
  python\opencv\modules\flann\src\miniflann.cpp:317: error: (-5:Bad 
   argument) Only continuous arrays are supported in function 
   'cv::flann::buildIndex_'

任何关于错误原因的建议将不胜感激。谢谢。

最佳答案

我认为错误是由您的视频帧引起的,其中没有检测到原始特征模板的痕迹。检查每个帧的匹配中间结果是什么,然后如果这是原因,则更改 FLANN 的参数或在错误发生之前跳过这些帧。

关于python - 与 FLANN 进行特征匹配时出现 OpenCV 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52096625/

相关文章:

php - SQL 选择最大值(Id)

python - 按值访问另一列,Pandas

python - 带有异常(exception)词列表的标题大小写

python - 俄罗斯方 block 计时问题

python - 关于背景透明 .png 格式 OpenCV 与 Python 的问题

python - 无法加载已保存的 FLANN 索引

python - 由于 qt,OpenCV cv2.imshow 无法正常工作

opencv - “模块”对象没有属性 'CreateStructuringElementEx'

c++ - 复制构造函数产生访问冲突后的 flann::Index 的析构函数

python-2.7 - 与opencv 3 ORB中的匹配错误