天天看點

Opencv java 角點檢測 preCornerDetect(15)

之前我們講過一節的角點檢測,是用的cornerHarris 這個方法,今天我們介紹另外的一種方法preCornerDetect 進行角點檢測

效果

首先我們看一下角點檢測的效果:

Opencv java 角點檢測 preCornerDetect(15)
Opencv java 角點檢測 preCornerDetect(15)

代碼

那麼代碼上應該如何實作:

try {
      ResourceBundle bundle = ResourceBundle.getBundle("opencv");
      String opencvDllName = bundle.getString("opencv.dllpath");
      System.load(opencvDllName);
    } catch (Exception e) {
      e.printStackTrace();
    }
    long startTime=System.currentTimeMillis();
    
    
    String filename = "D:\\360MoveData\\Users\\lxn\\Desktop\\opencvtest\\cph.png";
    Mat src = Imgcodecs.imread(filename);// 加載需要被蒙太奇的圖檔,原圖
    
    Mat gray = new Mat();
    Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);
    Mat dst = new Mat(gray.size(), CvType.CV_32F);
    // 焦點檢測
    Imgproc.preCornerDetect(gray, dst, 3);
    for (int i = 0; i < dst.rows(); i++) {
      for (int j = 0; j < dst.cols(); j++) {
        float[] floats = new float[1];
        dst.get(i, j, floats);
        if (floats[0] > 0.001) {
          Imgproc.circle(src, new Point(j, i), 5, new Scalar(255, 0, 255));
        }
      }
    }
    long endTime=System.currentTimeMillis();
    System.out.println((endTime-startTime)/1000.0);
    HighGui.imshow("source Imgae", src);
    HighGui.waitKey(10);      

 主要就是我們得到一個32F類型的結果,如何将結果和原圖進行結合展示

函數:

Imgproc.preCornerDetect(src, dst, ksize);

src 輸入圖像

dst 輸出圖像 CV_32F

ksize 辨別核大小 一般為3,5,7

比較:cornerHarris 

那麼個方法是cornerHarris 有什麼樣的差別

Opencv java 角點檢測 preCornerDetect(15)