Opencv——根据轮廓创建圆形边界框

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/wx19900503/article/details/94403517

一、创建矩形边界框
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

http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/shapedescriptors/bounding_rects_circles/bounding_rects_circles.html#bounding-rects-circles

猜你喜欢

转载自blog.csdn.net/wx19900503/article/details/94403517