1

我正在尝试使用此示例代码绘制关键点(没有图像):

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)但无济于事。

有什么想法可以实现吗?

谢谢。

4

2 回答 2

0

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);
}       

}
于 2015-02-08T08:47:45.750 回答
0

您可以通过在与原始图像具有相同形状的纯黑色图像上绘制关键点来获得关键点。

这是我使用的图像:

在此处输入图像描述

然后我得到了关键点:

在此处输入图像描述

然后我创建了一个与原始图像大小相同的纯色(黑色)图像,并在它们上面绘制了这些关键点。

在此处输入图像描述

瞧,只有关键点

代码:

#---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)
于 2017-02-15T17:06:00.327 回答