美文网首页
opencv 二 轮廓识别

opencv 二 轮廓识别

作者: 未羽出衫 | 来源:发表于2020-09-29 16:47 被阅读0次

基于之前的需求,最近又有新需求啦;需要将临近电梯的房间标记
最近还在做房间朝向、临路等需求,后面再更新

第一篇识的文字贴到这里 opencv 一 轮廓识别 https://www.jianshu.com/p/30dfeab6c0c3

获取电梯扩大矩形

 /**
     * 获取电梯扩大矩形
     * @param src
     * @param collision 临近值
     * @return
     */
    public static List<Rect> getNearElevator(Mat src,int collision) {
        //rgb 89 86 86
        Mat dtMat = new Mat();
        //寻找电梯rgb
        Core.inRange(src, new Scalar(86, 86, 89), new Scalar(86, 86, 89), dtMat);
        //高斯滤波(忽略图片毛点)
        Imgproc.GaussianBlur(dtMat, dtMat, new Size(9, 9), 9, 9);
        //输出二值后的电梯图片
        Imgcodecs.imwrite("D:\\img\\0.dt.png", dtMat);
        List<MatOfPoint> dtMP = new ArrayList<>();
        //寻找电梯轮廓
        Imgproc.findContours(dtMat, dtMP, new Mat(), Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
        Mat dtSrc = src.clone();
        List<Rect> dtRectPointList = new ArrayList<>();
        int dtIndex = 0;
        //遍历电梯矩形轮廓描点
        for (MatOfPoint cnt : dtMP) {
            //提取电梯矩形
            Rect rect = Imgproc.boundingRect(cnt);
            //扩大电梯矩形,用户计算临近电梯房间
            //计算左上角点
            Point startPoint = new Point(rect.x - collision, rect.y - collision);
            List<Point> pointList = new ArrayList<>();
            pointList.add(startPoint);
            //计算右上角点
            pointList.add(new Point(rect.x + rect.width + collision, rect.y - collision));
            //计算左下角点
            pointList.add(new Point(rect.x + rect.width + collision, rect.y + rect.height + collision));
            //计算右下角点
            pointList.add(new Point(rect.x - collision, rect.y + rect.height + collision));
            Mat trackDt = src.clone();
            //标记扩大矩形角点
            for (Point pointItem : pointList) {
                Imgproc.drawMarker(trackDt, pointItem, new Scalar(0, 0, 15), Imgproc.MARKER_TILTED_CROSS);
            }
            //将扩大矩形记录
            dtRectPointList.add(new Rect(startPoint, new Size(rect.width + collision, rect.y - collision)));
            Imgcodecs.imwrite("D:\\img\\src" + dtIndex + ".png", trackDt);
            dtIndex++;
        }
        System.out.println("dt" + dtMP.size());
        return dtRectPointList;
    }

根据房间坐标计算是否临近电梯

List<Rect> dtRectPointList = getNearElevator(src,collision);
 for (Point pointItem : roomPointList) {
              if (!isNearElevator && pointList.contains(pointItem)) {
                  System.out.println("临近电梯:" + roomNumber);
                  isNearElevator = true;
                  break;
               }
  }
原图
image.png
二值电梯图片
image.png
电梯矩形扩大
a1.jpg

相关文章

  • opencv 二 轮廓识别

    基于之前的需求,最近又有新需求啦;需要将临近电梯的房间标记最近还在做房间朝向、临路等需求,后面再更新 第一篇识的文...

  • opencv 一 轮廓识别

    基于opencv java api实现图像识别需求是将图片上的房间多边形识别出来后绘制到地图上,使用户可以在地图上...

  • OpenCv For Unity 图像中的轮廓识别

    OpenCV中的轮廓识别也是需要经常需要用到;识别到轮廓后,再对轮廓区域进行操作,下面先看看我们需要实现的效果: ...

  • 图像识别案例

    Python学习:基于Opencv来快速实现人脸识别(完整版) Opencv之python下车牌识别 OpenCV...

  • OpenCV人脸识别

    OpenCV人脸识别 目标方案 在树莓派上,PiCamera获得视频流,OpenCV识别, 然后用mjpg-str...

  • 【OPENCV】轮廓检测

    Tags: DIP findContours() void findContours(InputOutputArr...

  • opencv图像轮廓

    1.1什么是轮廓 cv2.findContours() 轮廓可以简单认为成连续的点(连着边界)连在一起的曲线,具有...

  • opencv 轮廓检测

  • openCV:图像轮廓

    查找轮廓 什么是轮廓 轮廓可以简单认为成连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析...

  • OpenCV 之轮廓

    什么是轮廓 轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的...

网友评论

      本文标题:opencv 二 轮廓识别

      本文链接:https://www.haomeiwen.com/subject/ubmeuktx.html