之前我們講過一節的角點檢測,是用的cornerHarris 這個方法,今天我們介紹另外的一種方法preCornerDetect 進行角點檢測
效果
首先我們看一下角點檢測的效果:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiQDOxEzX3xCZlhXam9VbsUmepNXZy9CXwJWZ3xCdh1mcvZ2Lc1zaHRGcWdUYuVzVa9GczoVdG1mWfVGc5RHLwIzX39GZhh2csATMflHLwEzX4xSZz91ZsAzMfRHLGZkRGZkRfJ3bs92YskmNhVTYykVNQJVMRhXVEF1X0hXZ0xiNx8VZ6l2cssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLzQjMxITO2ImNmNjMhZzYyYzXxEzNwcTM3AzLcdDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
代碼
那麼代碼上應該如何實作:
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 有什麼樣的差別