错误:( - 215)type == src2.type()&& src1.cols == src2.cols&& (type == 5 || type == 0)in function cv :: batchDistance

时间:2018-05-18 02:12:07

标签: python-3.x opencv orb

我使用ORB进行以下代码进行图像匹配:

import numpy as np
import cv2
from matplotlib import pyplot as plt

img1 = cv2.imread('C:\\IRRNEW\\models\\research\\object_detection\\Scanner\\IMG_Hello.jpg',0)          # queryImage
img2 = cv2.imread('C:\\IRRNEW\\models\\research\\object_detection\\Image.jpg',0) # trainImage
#orb = cv2.ORB_create()
orb = cv2.ORB_create(nfeatures=10000, scoreType=cv2.ORB_FAST_SCORE)
# find the keypoints with ORB
kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(des1,des2)
matches = sorted(matches, key = lambda x:x.distance)
img3 = cv2.drawMatches(img1,kp1,img2,kp2,matches[::], None,flags=2)
a=len(matches)
print(a)
b=len(des)
print(b)
plt.imshow(img3),plt.show()

Previosly这段代码能够运行并向我显示结果,但现在突然给我这个错误:

Traceback (most recent call last):
  File "C:\Users\user\Desktop\h.py", line 13, in <module>
matches = bf.match(des1,des2)
cv2.error: C:\projects\opencv-python\opencv\modules\core\src\stat.cpp:4022: error: (-215) type == src2.type() && src1.cols == src2.cols && (type == 5 || type == 0) in function cv::batchDistance

opencv的版本: opencv-python 3.4.0.12

请帮助,我从网上推荐解决方案,但没有任何帮助,希望你们能分享我的想法。感谢

3 个答案:

答案 0 :(得分:1)

我也有同样的错误!

错误:(-215:断言失败)类型== src2.type()&& src1.cols == 函数'cv :: batchDistance'中的src2.cols &&(类型== 5 ||类型== 0)

在进行一些打印调试后,我发现如果分支程序实际上是None,则发现一个。因此,在传递给匹配器之前,请确保两个描述符都不为None。

答案 1 :(得分:0)

这不能回答原始问题,但是我遇到了相同的错误,因此这可能对其他人有帮助:

确保descriptor1.shape[1] == descriptor2.shape[1]。 如果您不使用cv库来计算描述符,请确保描述符的第一个维是点数,第二个维是要素维数,而不是相反。

答案 2 :(得分:0)

您已确保已读取文件图像 plt.imshow(img),plt.show() 。然后打印(des1,des2)。我想你可能有 des1 或 des2 之一有 []。没有任何图像距离(汉明距离无法找出)。它可能原始图像文件非常流畅。