- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想做一个关于标志检测的简单项目。所以我试着按照关于特征检测的 OpenCV-Python 教程。 OpenCV: Feature Matching
我的代码如下所示。
ratio = 0.8
logo = cv.imread("T01/CocaCola_logo2.png", cv.IMREAD_GRAYSCALE)
img = cv.imread("T01/CocaCola.png", cv.IMREAD_GRAYSCALE)
orb = cv.ORB_create()
kp_logo, des_logo = orb.detectAndCompute(logo, None)
kp_img, des_img = orb.detectAndCompute(img, None)
FLANN_INDEX_LSH = 6
index_params = dict(algorithm=FLANN_INDEX_LSH,
table_number=6,
key_size=12,
multi_probe_level=1)
search_params = dict(checks=50)
flann = cv.FlannBasedMatcher(index_params, search_params)
match_flann = flann.knnMatch(des_logo, des_img, k=2)
good = []
for p, q in match_flann:
if p.distance > q.distance*ratio:
good.append(p)
try:
img_match = np.empty((max(logo.shape[0], img.shape[0]), logo.shape[1] + img.shape[1], 3), dtype=np.uint8)
cv.drawMatchesKnn(logo, kp_logo, img, kp_img, good,
outImg=img_match, matchColor=None, singlePointColor=(255, 255, 255), flags=2)
cv.imshow("flann matching", img_match)
cv.waitKey(0)
except:
print("...")
此代码无法正常工作。进程总是被 drawMatchesKnn() 错误处理。在我向该函数添加 try-except 之前,进程出现系统错误:SystemError: returned NULL without setting an error
问题的原因是什么?我尝试搜索了很长时间,但这对我来说并不容易。
堆栈跟踪:追溯(最近一次通话): 文件“C:/Users/choib/Desktop/openCVtest3/T01_ORBtest.py”,第 73 行,位于 cv.drawMatchesKnn(logo, kp_logo, img, kp_img, good, outImg=img_match, matchColor=None, singlePointColor=(255, 255, 255), 标志=2) SystemError: 返回 NULL 没有设置错误
最佳答案
我误解了 drawMatches() 和 drawMatchesKnn()。 reference
drawMatchesKnn()需要得到DMatch的向量组成的向量作为matches1to2。因此,就我而言,我修复了如下代码。
案例一:正确使用
img_match = np.empty((max(logo.shape[0], img.shape[0]), logo.shape[1] + img.shape[1], 3), dtype=np.uint8)
cv.drawMatches(logo, kp_logo, img, kp_img, good_flann,
outImg=img_match, matchColor=None, singlePointColor=(255, 255, 255), flags=2)
cv.imshow("flann matching", img_match)
cv.waitKey(0)
情况 2:使用 drawMatchesKnn()
img_match = np.empty((max(logo.shape[0], img.shape[0]), logo.shape[1] + img.shape[1], 3), dtype=np.uint8)
cv.drawMatchesKnn(logo, kp_logo, img, kp_img, match_flann,
outImg=img_match, matchColor=None, singlePointColor=(255, 255, 255), flags=2)
cv.imshow("flann matching", img_match)
cv.waitKey(0)
在这些代码中,good_flann 只是 DMatch 的向量。 match_flann 是向量的向量。所以这些部分的过程没有任何问题。
关于python - opencv-python : drawMatchesKnn() always return NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54088002/
当我尝试使用此 tutorial 中提到的 drawMatchesKnn 函数时对于 FLANN 特征匹配,我得到以下错误 AttributeError: 'module' object has no
我想做一个关于标志检测的简单项目。所以我试着按照关于特征检测的 OpenCV-Python 教程。 OpenCV: Feature Matching 我的代码如下所示。 ratio = 0.8 log
我是一名优秀的程序员,十分优秀!