android opencv找到圆并取圆心
时间: 2023-07-04 13:15:33 浏览: 133
利用C#版OpenCV实现圆心求取实例代码
在OpenCV中,可以使用 `Imgproc.HoughCircles()` 方法来检测图像中的圆。该方法将一个灰度图像作为输入,并返回一个 `Mat` 类型的结果,该结果表示图像中所有检测到的圆。
以下是检测圆并取圆心的示例代码:
```java
// 假设你已经读入了一张图像,保存在变量 img 中
// 转换为灰度图像
Mat gray = new Mat();
Imgproc.cvtColor(img, gray, Imgproc.COLOR_BGR2GRAY);
// 模糊处理,以便更好地检测圆
Imgproc.GaussianBlur(gray, gray, new Size(9, 9), 2, 2);
// 使用霍夫变换检测圆
Mat circles = new Mat();
Imgproc.HoughCircles(gray, circles, Imgproc.CV_HOUGH_GRADIENT, 1, gray.rows() / 8, 200, 100, 0, 0);
// 遍历所有检测到的圆
for (int i = 0; i < circles.cols(); i++) {
double[] circle = circles.get(0, i);
// 获取圆心坐标和半径
Point center = new Point(Math.round(circle[0]), Math.round(circle[1]));
int radius = (int) Math.round(circle[2]);
// 在图像上绘制圆
Imgproc.circle(img, center, radius, new Scalar(0, 255, 0), 2);
}
```
在这个代码片段中,我们首先将彩色图像转换为灰度图像,并对灰度图像进行模糊处理,以便更好地检测圆。然后,我们使用 `Imgproc.HoughCircles()` 方法检测图像中的圆,并将结果保存在 `circles` 变量中。接着,我们遍历所有检测到的圆,使用 `circles.get()` 方法获取圆心坐标和半径,并使用 `Imgproc.circle()` 方法在图像上绘制出圆。
需要注意的是,这里我们只绘制了所有检测到的圆。如果你想绘制某个特定的圆,可以根据需要在遍历时进行判断。另外,由于圆心坐标是一个 `Point` 类型,可以直接用来表示平面上的一个点。
阅读全文