当我运行python代码时
import numpy as np
import cv2
import matplotlib.pyplot as plt
img1 = cv2.imread('/home/shar/home.jpg',0) # queryImage
img2 = cv2.imread('/home/shar/home2.jpg',0) # trainImage
# Initiate SIFT detector
sift = cv2.xfeatures2d.SIFT_create()
# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)
# BFMatcher with default params
bf = cv2.BFMatcher()
matches = bf.knnMatch(des1,des2, k=2)
# Apply ratio test
good = []
for m,n in matches:
if m.distance < 0.75*n.distance:
good.append([m])
# cv2.drawMatchesKnn expects list of lists as matches.
img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,flags=2)
plt.imshow(img3),plt.show()
从这条线
img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,flags=2)
我知道这个错误
TypeError: Required argument 'outImg' (pos 6) not found
我在用python3和opencv3
好吧,伙计们,我是一个新手,在网上研究了几个小时后,我学到了很多东西,这似乎是一个错误,叫做错误(-255)NumpyAllocator,很多网站都会建议你打开cv2.cpp文件,注释掉163行代码,我的建议是如果你使用OpenCV 3.1,把成绩下载到opencv3.0.0
这个bug似乎在OpenCV 3.1中,除此之外,OpenCV.org上记录的使用ORB算法的代码有点过时了 它所说的
enter code here
启动ORB探测器enter code here
orb=cv2.orb();注意,您将得到一个错误,因为现在enter code here
更改为:enter code here
orb=cv2.orb\u create()下面是我在Windows10上使用OpenCV3.0.0的代码示例:
我希望这对我有帮助,我喜欢堆栈溢出它最好的资源在互联网上。
你似乎是following this tutorial page(基于你在本文中显示的代码和两个相关的问题1,2)。
function documentation is here(尽管我注意到它仍然被标记为“beta”)并意味着
outImg
是可选的。但是,python错误消息是显式的-在位置6中需要一个参数,它在函数签名中被命名为outImg
。我怀疑文档可能与代码要求不完全匹配。python绑定正在调用的C++ code的签名没有outImg
的默认值,因此需要提供该参数。注意,您可以通过查看
<function_name>.__doc__
来检查python3解释器(如果存在的话)中的实际绑定的doc字符串。在这种情况下,可以看到outImg
是而不是显示为可选的。以下是我的安装输出:解决方案(注意-已在windows安装而不是Linux上验证)
您可能会注意到last example on that tutorial,它使用以下代码传入
None
来代替outImg
。我想这对你的案子也有用。你不需要通过所有的
draw_params
指令,你可以尝试通过flags
即我已经在新安装的OpenCV 3上验证了这一点(尽管是在Windows上,使用预先构建的二进制文件)
我的代码:
img3 = cv2.drawMatchesKnn(img1, kp1, img2, kp2, good, flags=2)
在这段代码之后工作,keyword和parameter=“None”:
img3 = cv2.drawMatches(img1,kp1,img2,kp2,matches ,None, flags=2)
相关问题 更多 >
编程相关推荐