python-3.x 错误:(-215)类型==源2.类型()&&源1.列==源2.列&&(类型== 5||函数cv::batchDistance中的类型== 0)

6jjcrrmo  于 2022-11-19  发布在  Python
关注(0)|答案(4)|浏览(233)

我有下面的代码,用于使用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()

以前这个代码能够运行并显示我的结果,但现在突然给予我这个错误:

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的版本:开放源码软件-3.4.0.12
请帮助,我参考解决方案从网上,但没有帮助,希望你们能分享我的想法。谢谢

bihw5rsg

bihw5rsg1#

我也犯了同样的错误!
错误:(-215:Assert失败)类型== src2.type()&& src1.cols == src2.cols &&(类型== 5||函数'cv::batchDistance'中的类型== 0
在一些打印调试之后,我发现其中一个描述符实际上是None。所以在将它们传递给匹配器之前,请确保两个描述符都不是None。

dgiusagp

dgiusagp2#

这并没有回答原来的问题,但我得到了同样的错误,所以这可能有助于其他人:
如果你没有使用cv库来计算描述符,确保你的描述符的第一维是点数,第二维是特征维数,而不是相反。

o4hqfura

o4hqfura3#

首先需要通过以下语句检查测试图像和训练图像的描述符是否都不为空:

if type(des1)!=NoneType and type(des2)!=NoneType:

此外,您需要导入类型以检查NoneType。
例如:

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

NoneType=type(None)
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)

if type(des1)!=NoneType and type(des2)!=NoneType:
    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()
else:
    print("There are no descriptors to be matched.")
ewm0tg9j

ewm0tg9j4#

你已经确定,文件图像被读取plt.imshow(img),plt.show()。然后打印(des1,des2)。我想你可能有des1或des2中的一个有[]。没有任何图像距离(汉明距离找不到)。它可能原始图像文件是非常平滑的。

相关问题