之前我们讲过一节的角点检测,是用的cornerHarris 这个方法,今天我们介绍另外的一种方法preCornerDetect 进行角点检测
效果
首先我们看一下角点检测的效果:
代码
那么代码上应该如何实现:
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 有什么样的区别
看 效果我总感觉使用cornerHarris方法进行检测的话,效果会更好
希望对你有所帮助