哈里斯角点检测cornerHarris
/**
* 哈里斯角点检测,角是图像中各个方向上强度变化很大的区域
* cornerHarris(
* Mat src, --输入图像,灰度和float32类型
* Mat dst --输出图像
* int blockSize, --是拐角检测考虑的邻域大小
* int ksize, --使用的Sobel导数的光圈参数
* double k --哈里斯检测器自由参数
* )
*/
@Test
public void testCornerHarris() {
Mat src = GeneralUtils.converMat("D:\\test\\t2.jpg");
Mat gray = new Mat();
Mat result = new Mat();
//转成灰度图
Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);
//角点检测
Imgproc.cornerHarris(gray, result, 2, 3, 0.04);
Mat dst_norm = Mat.ones(result.size(), result.type());
//将检测到的值归一化到0~255之间,因为输出图像dst检测到的值是浮点数
Core.normalize(result, dst_norm, 0, 255, Core.NORM_MINMAX);
//将归一化后的图像像素值取绝对值,因为归一化后的图像有可能是负数
Core.convertScaleAbs(dst_norm, dst_norm);
//绘制角点
for (int row = 0; row < dst_norm.rows(); row++) {
for (int col = 0; col < dst_norm.cols(); col++ ) {
double[] rsp = dst_norm.get(row, col);
if (rsp[0] > 140) {
Imgproc.circle(src, new Point(row, col), 5, new Scalar(0, 0, 255));
}
}
}
GeneralUtils.saveByteImg(src, "D:\\test\\cornerHarris.jpg");
}
goodFeaturesToTrack角点检测
/**
* 角是图像中各个方向上强度变化很大的区域
* goodFeaturesToTrack函数可以计算Harris角点和shi-tomasi角点,但默认情况下计算的是shi-tomasi角点
* goodFeaturesToTrack(
* Mat src, --8位或32位浮点型输入图像,单通道
* Mat dst, --保存检测出的角点
* int maxCorners, --角点数目最大值,如果实际检测的角点超过此值,则只返回前maxCorners个强角点
* double qualityLevel, --角点的品质因子
* double minDistance, --对于初选出的角点而言,如果在其周围minDistance范围内存在其他更强角点,则将此角点删除
* Mat mask, --指定感兴趣区,如不需在整幅图上寻找角点,则用此参数指定ROI
* int blockSize, --计算协方差矩阵时的窗口大小
* bool useHarrisDetector, --指示是否使用Harris角点检测,如不指定,则计算shi-tomasi角点
* double harrisK --Harris角点检测需要的k值
* )
*/
@Test
public void testGoodFeaturesToTrack() {
Mat src = GeneralUtils.converMat("D:\\test\\t2.jpg");
Mat gray = new Mat();
//转成灰度图
Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);
MatOfPoint corners = new MatOfPoint();
//角点检测
Imgproc.goodFeaturesToTrack(gray, corners, 100, 0.01, 0.04, new Mat(), 3, false, 0.04);
//绘制角点
for (int i = 0; i < corners.rows(); i++) {
double[] points = corners.get(i,0);
Imgproc.circle(src, new Point(points[0], points[1]), 5, new Scalar(0, 0, 255));
}
GeneralUtils.saveByteImg(src, "D:\\test\\goodFeaturesToTrack.jpg");
}