2014-03-13 48 views
1

我想繪製關鍵點(沒有圖像)使用此示例代碼: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)但徒勞無功。

任何想法如何實現?

謝謝。

回答

0

您可以通過繪製它們具有SAME形狀的原始圖像的純黑色圖像上得到ONLY的關鍵點。

這是我所使用的圖像:

enter image description here

我然後得到的關鍵點:

enter image description here

然後創建具有相同大小的固體顏色(黑色)的圖像原始圖像並在其上繪製這些關鍵點。

enter image description here

瞧ONLY關鍵點

CODE:

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

}