一、创建矩形边界框
1、通过 boundingRect(MatOfPoint points) 来计算包围轮廓的矩形框
2、通过 rectangle(Mat img, Point pt1, Point pt2, Scalar color, int thickness) 来画出对应的矩形
主要函数:
public static void minEnclosingCircle(MatOfPoint2f points,
Point center,
float[] radius)
输出圆心中点坐标、半径
public static void circle(Mat img,
Point center,
int radius,
Scalar color)
画出圆形边界图
对应代码如下:
public static void getCircle() {
Mat img =Imgcodecs.imread("/Users/wuxi/Pictures/blog/base.png", 0);
Mat circle =img.clone();
//图像的模糊化Blur处理,输出 dstImage 3*3,平滑处理
Imgproc.blur(img, img, new Size(3, 3));
Imgcodecs.imwrite("/Users/wuxi/Pictures/picture/M0_1.jpg", img);
//边缘检测
Imgproc.Canny(img, img, 40, 80);
Imgcodecs.imwrite("/Users/wuxi/Pictures/picture/M0_2.jpg", img);
List<MatOfPoint> contours = new ArrayList<>();
Mat hierarchy = new Mat();
Imgproc.findContours(img, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
//计算圆形边界需要转换成MatOfPoint2f
MatOfPoint2f points = new MatOfPoint2f(contours.get(0).toArray());
//圆心坐标
Point center = new Point();
//半径
float[] radius = {0};
//计算最小的包围圆
Imgproc.minEnclosingCircle(points, center, radius);
//画出圆形边界
Imgproc.circle(circle,center, (int) radius[0],new Scalar(0,0,255),2);
Imgcodecs.imwrite("/Users/wuxi/Pictures/picture/M0_3.jpg", circle);
}
图片处理过程为:
参考:
https://docs.opencv.org/3.4.2/javadoc/index.html