Android技术知识Android开发Android开发经验谈

计算机视觉 OpenCV Android | 基本特征检测之 霍

2019-02-05  本文已影响10人  凌川江雪

霍夫圆检测的API:

使用API实现灰度图像圆检测:

private void houghCircleDemo(Mat src, Mat dst) {
  Mat gray = new Mat();
  Imgproc.pyrMeanShiftFiltering(src, gray, 15, 80);
  Imgproc.cvtColor(gray, gray, Imgproc.COLOR_BGR2GRAY);
  Imgproc.GaussianBlur(gray, gray, new Size(3, 3), 0);
  // detect circles
  Mat circles = new Mat();
  dst.create(src.size(), src.type());
  Imgproc.HoughCircles(gray, circles, Imgproc.HOUGH_GRADIENT, 1, 20, 100, 30, 10, 200);
  for(int i=0; i<circles.cols(); i++) {
    float[] info = new float[3];
    circles.get(0, i, info);
    Imgproc.circle(dst, new Point((int)info[0], (int)info[1]), (int)info[2],
        new Scalar(0, 255, 0), 2, 8, 0);
  }
  circles.release();
  gray.release();
}
运行结果如下图,左侧为原图,右侧是霍夫圆检测运行结果:
上述三个指定参数如何影响霍夫圆检测的计算量
  1. 指定半径范围:
    minRadius:检测的最小圆半径,单位为像素。
    maxRadius:检测的最大圆半径,单位为像素。
    即函数只检测半径处于minRadius和maxRadius之间的圆,所以指定半径范围自然能够影响计算量了。
  2. 指定边缘阈值
    霍夫圆检测的基于内部边缘检测的结果;
    而边缘阈值影响边缘检测最终留下的边缘像素,即影响内部边缘检测的结果,
    因而影响霍夫圆检测的计算量;
  3. 累积器阈值
    此阈值的高低便是提取圆的要求的高低,高阈值高要求高计算量,反之亦然。
上一篇 下一篇

猜你喜欢

热点阅读