OpenCV - отображать ТОЛЬКО ключевые точки, а не изображение, используя SIFT

Я пытаюсь нарисовать только ключевые точки (без изображения), используя этот пример кода:

import cv2
import numpy as np

img = cv2.imread('test.png')
gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

sift = cv2.SIFT()
kp = sift.detect(gray,None)

img=cv2.drawKeypoints(gray,kp)

cv2.imwrite('sift_keypoints.jpg',img)

Я пробовал cv2.drawKeypoints(None,kp) и cv2.drawKeypoints(kp), но безрезультатно.

Любые идеи, как это может быть достигнуто?

Спасибо.


person digit    schedule 13.03.2014    source источник


Ответы (2)


Вы можете получить ТОЛЬКО ключевые точки, нарисовав их на сплошном черном изображении, имеющем ТУ ЖЕ форму, что и исходное изображение.

Это изображение, которое я использовал:

введите здесь описание изображения

Затем я получил ключевые точки:

введите здесь описание изображения

Затем я создал изображение сплошного цвета (черного цвета) того же размера, что и исходное изображение, и нарисовал на нем эти ключевые точки.

введите здесь описание изображения

Вуаля ТОЛЬКО ключевые точки

КОД:

#---Creating image of solid color with same size as image---
mask = np.zeros((img.shape[0], img.shape[1], 3), np.uint8)
mask[:] = (0, 0, 0) 

#---Drawing keypoints on the mask image---
fmask = cv2.drawKeypoints(mask,kp,None,color=(0,255,0), flags=0)
cv2.imshow('fmask.jpg', fmask)
person Jeru Luke    schedule 15.02.2017

OpenCV не имеет никакого метода для рисования ключевых точек в одиночку. Это код, который я использовал для поиска ключевых точек SIFT.

import org.opencv.core.*;
import org.opencv.features2d.FeatureDetector;
import org.opencv.features2d.Features2d;
import org.opencv.highgui.*;

import com.atul.JavaOpenCV.Imshow;

public class testdraw 
{
public static void main(String args[])
{

        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

        Mat img=Highgui.imread("C:\\100.jpg");
        Mat outputImage = new Mat();

        FeatureDetector siftDetector = FeatureDetector.create(FeatureDetector.SIFT);
        MatOfKeyPoint siftKeypoint = new MatOfKeyPoint();

        siftDetector.detect(img,siftKeypoint);
        Features2d.drawKeypoints(img, siftKeypoint, outputImage);

        //Highgui.imwrite("C:\\101.jpg", outputImage);
        Imshow im = new Imshow("Output");
        im.showImage(outputImage);
}       

}
person user3249214    schedule 08.02.2015