問(wèn)題描述
我只是在 OpenCV 中做一個(gè)特征檢測(cè)的例子.此示例如下所示.它給了我以下錯(cuò)誤
I am just doing an example of feature detection in OpenCV. This example is shown below. It is giving me the following error
模塊'對(duì)象沒(méi)有屬性'drawMatches'
我檢查了 OpenCV 文檔,但不確定為什么會(huì)出現(xiàn)此錯(cuò)誤.有誰(shuí)知道為什么?
I have checked the OpenCV Docs and am not sure why I'm getting this error. Does anyone know why?
import numpy as np
import cv2
import matplotlib.pyplot as plt
img1 = cv2.imread('box.png',0) # queryImage
img2 = cv2.imread('box_in_scene.png',0) # trainImage
# Initiate SIFT detector
orb = cv2.ORB()
# find the keypoints and descriptors with SIFT
kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)
# create BFMatcher object
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
# Match descriptors.
matches = bf.match(des1,des2)
# Draw first 10 matches.
img3 = cv2.drawMatches(img1,kp1,img2,kp2,matches[:10], flags=2)
plt.imshow(img3),plt.show()
錯(cuò)誤:
Traceback (most recent call last):
File "match.py", line 22, in <module>
img3 = cv2.drawMatches(img1,kp1,img2,kp2,matches[:10], flags=2)
AttributeError: 'module' object has no attribute 'drawMatches'
推薦答案
drawMatches
函數(shù)不是 Python 接口的一部分.
正如您在 docs 中看到的,它僅定義為C++
目前.
The drawMatches
Function is not part of the Python interface.
As you can see in the docs, it is only defined for C++
at the moment.
文檔摘錄:
C++: void drawMatches(const Mat& img1, const vector<KeyPoint>& keypoints1, const Mat& img2, const vector<KeyPoint>& keypoints2, const vector<DMatch>& matches1to2, Mat& outImg, const Scalar& matchColor=Scalar::all(-1), const Scalar& singlePointColor=Scalar::all(-1), const vector<char>& matchesMask=vector<char>(), int flags=DrawMatchesFlags::DEFAULT )
C++: void drawMatches(const Mat& img1, const vector<KeyPoint>& keypoints1, const Mat& img2, const vector<KeyPoint>& keypoints2, const vector<vector<DMatch>>& matches1to2, Mat& outImg, const Scalar& matchColor=Scalar::all(-1), const Scalar& singlePointColor=Scalar::all(-1), const vector<vector<char>>& matchesMask=vector<vector<char> >(), int flags=DrawMatchesFlags::DEFAULT )
如果函數(shù)有 Python 接口,你會(huì)發(fā)現(xiàn)類(lèi)似這樣的內(nèi)容:
If the function had a Python interface, you would find something like this:
Python: cv2.drawMatches(img1, keypoints1, [...])
編輯
實(shí)際上有一個(gè) commit 介紹了這個(gè)函數(shù).但是,它(還沒(méi)有)在官方文檔中.
確保您使用的是最新的 OpenCV 版本 (2.4.7).為了完整起見(jiàn),OpenCV 3.0.0 的函數(shù)接口看起來(lái)像 這個(gè):
There actually was a commit that introduced this function 5 months ago. However, it is not (yet) in the official documentation.
Make sure you are using the newest OpenCV Version (2.4.7).
For sake of completeness the Functions interface for OpenCV 3.0.0 will looks like this:
cv2.drawMatches(img1, keypoints1, img2, keypoints2, matches1to2[, outImg[, matchColor[, singlePointColor[, matchesMask[, flags]]]]]) → outImg
這篇關(guān)于模塊'對(duì)象沒(méi)有屬性'drawMatches'opencv python的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!