天天看点

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)