web-dev-qa-db-ja.com

記述子抽出にpython)を指定してOpenCVを使用した例はありますか?

OpenCVを使用して画像からSURF記述子を抽出しようとしています。 OpenCV2.4とPython 2.7を使用していますが、関数の使用方法に関する情報を提供するドキュメントを見つけるのに苦労しています。次のコードを使用して特徴を抽出することができました。 、しかし、記述子を抽出するための賢明な方法が見つかりません:

import cv2

img = cv2.imread("im1.jpg")
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

surf = cv2.FeatureDetector_create('SURF')
detector = cv2.GridAdaptedFeatureDetector(surf, 50) # max number of features
fs = detector.detect(img2)

記述子を抽出するために試したコードは次のとおりです。

import cv2
img = cv2.imread("im3.jpg")
sd = cv2.FeatureDetector_create("SURF")
surf = cv2.DescriptorExtractor_create("SURF")
keypoints = []
fs = surf.compute(img, keypoints) # returns empty result
sd.detect(img) # segmentation faults

この種のことを行うサンプルコード、またはサンプルを提供するドキュメントへのポインタを持っている人はいますか?

16
Ben

Python 2.7とOpenCV2.4を使用してSURF機能を抽出するために私が書いたコードの例を次に示します。

im2 = cv2.imread(imgPath)
im = cv2.cvtColor(im2, cv2.COLOR_BGR2GRAY)
surfDetector = cv2.FeatureDetector_create("SURF")
surfDescriptorExtractor = cv2.DescriptorExtractor_create("SURF")
keypoints = surfDetector.detect(im)
(keypoints, descriptors) = surfDescriptorExtractor.compute(im,keypoints)

これは機能し、記述子のセットを返します。残念ながら、cv2.SURF()は2.4では機能しないため、この面倒なプロセスを実行する必要があります。

14
Kkov

これは私がかなり最近uniのためにした簡単なコードです。カメラから画像をキャプチャし、検出されたキーポイントを出力画像にリアルタイムで表示します。お役に立てば幸いです。

いくつかのドキュメントがあります ここ

コード:

import cv2

#Create object to read images from camera 0
cam = cv2.VideoCapture(0)

#Initialize SURF object
surf = cv2.SURF(85)

#Set desired radius
rad = 2

while True:
    #Get image from webcam and convert to greyscale
    ret, img = cam.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    #Detect keypoints and descriptors in greyscale image
    keypoints, descriptors = surf.detect(gray, None, False)

    #Draw a small red circle with the desired radius
    #at the (x, y) location for each feature found
    for kp in keypoints:
        x = int(kp.pt[0])
        y = int(kp.pt[1])
        cv2.circle(img, (x, y), rad, (0, 0, 255))

    #Display colour image with detected features
    cv2.imshow("features", img)

    #Sleep infinite loop for ~10ms
    #Exit if user presses <Esc>
    if cv2.waitKey(10) == 27:
        break
6
Gareth Webber

Open cv 2.4.3を使用すると、次のことができます。

import cv2
surf = cv2.SURF()
keypoints, descriptors = surf.detectAndCompute(img,None,useProvidedKeypoints = True)
5
lizzie

todofixthis私はあなたのコードに従い、これを取得します

import cv2
img = cv2.imread("im3.jpg")
sd = cv2.FeatureDetector_create("SURF")
surf = cv2.DescriptorExtractor_create("SURF")
keypoints = sd.detect(img) # segmentation faults
l,d = surf.compute(img, keypoints) # returns empty result

どこ

l =キーポイント

d =記述子

2
Enu