java调用opencv轮廓检测

简介: java调用opencv轮廓检测

FindContours


显示最大轮廓


网络异常,图片无法展示
|


public static void testFindContours(Mat image) {
 //高斯滤波
 Imgproc.GaussianBlur(image, image, new Size(3, 3), 0, 0);
 Imgproc.cvtColor(image, image,Imgproc.COLOR_BGR2GRAY);
//一般来说,高阈值maxVal推荐是低阈值minVal的2~3倍
 int lowThresh=45;
 //边缘检测
 Imgproc.Canny(image, image,lowThresh, lowThresh*3,3);
 HighGui.imshow("Canny", image);
 List<MatOfPoint> contours = new ArrayList<>();
 Mat hierarchy = new Mat();
 /**
  * iamge 输入图像,需为8位单通道的二进制图像
  * contours 存储检测到的轮廓,每个轮廓存储为一个点向量
  * hierarchy //包含图像的拓扑信息,作为轮廓数量的表示。
              //每个轮廓对应4个hierarchy元素,分别表示后一个轮廓、
              //前一个轮廓、父轮廓、内嵌轮廓的索引编号。
              //若没有对应项,对应的hierarchy[i]值设置为负数
  *  mode 轮廓检索模式 RETR_EXTERNAL 只检测最外围的轮廓
  *                  RETR_LIST 检测所有轮廓,不建立等级关系,彼此独立
  *                  RETR_CCOMP 检测所有轮廓,但所有轮廓都只建立两个等级关系 
  *                  RETR_TREE 检测所有轮廓,并且所有轮廓建立一个树结构,层次完整。
  *                  RETR_FLOODFILL 洪水填充法
  *  method 轮廓的近似办法 CHAIN_APPROX_NONE 保存物体边界上所有连续的轮廓点
  *                      CHAIN_APPROX_SIMPLE 压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息
  *                      CV_CHAIN_APPROX_TC89_L1 使用Teh-Chin 链近似算法
  *                      CV_CHAIN_APPROX_TC89_KCOS 使用Teh-Chin 链近似算法
  *  offset //每个轮廓点的可选偏移量
  */ 
 Imgproc.findContours(image, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_NONE);
 System.out.println("轮廓数量:"+ contours.size());
 System.out.println("hierarchy类型:"+ hierarchy);
 // 找出匹配到的最大轮廓
 double area = Imgproc.boundingRect(contours.get(0)).area();
 int index = 0;
 Random rng = new Random();
 Mat drawing = Mat.zeros(image.size(), CvType.CV_8U);
 //Imgproc.drawContours(drawing, contours, -1, new Scalar(255), 3, Imgproc.LINE_8, hierarchy, 0, new Point());
 Scalar color = new Scalar(rng.nextInt(256), rng.nextInt(256), rng.nextInt(256));
 for (int i = 0; i < contours.size(); i++) {
        double tempArea = Imgproc.boundingRect(contours.get(i)).area();
        if (tempArea > area) {
          area = tempArea;
          index = i;
        }
 }
     /**
      * image,目标图像,填 Mat 类对象即可。
      * contours,输入的轮廓,每个轮廓都是一组点集,可用 Point 类型的 vector 表示。
      * contourIdx,轮廓的索引编号。若为负值,则绘制所有轮廓。
      * color,轮廓颜色。
      * thickness,轮廓线条的粗细程度,有默认值 1。若其为负值,便会填充轮廓内部空间。
      * lineType,线条的类型,有默认值 8。可去类型如下:
            *                      类型 含义
      *           8 8 连通线型
      *           4 4 连通线型
      *           LINE_AA 抗锯齿线型
      * hierarchy,可选的层次结构信息,有默认值 noArray()。
      * maxLevel,用于绘制轮廓的最大等级,有默认值 INT_MAX。
      * offset,轮廓信息相对于目标图像对应点的偏移量,相当于在每一个轮廓点上加上该偏移量,有默认值 Point() 。在 ROI 区域(感兴趣区域)绘制轮廓时,这个参数便可派上用场。
      */
 Imgproc.drawContours(drawing, contours, index, color, 1, Imgproc.LINE_AA, hierarchy, 0, new Point());
 HighGui.imshow("findContours", drawing);


相关文章
|
4月前
|
机器学习/深度学习 Java 开发工具
【移花接木】OpenCV4.8 For Java 深度学习 实时人脸检测
【移花接木】OpenCV4.8 For Java 深度学习 实时人脸检测
91 0
|
5月前
|
数据采集 Java 数据挖掘
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
|
4月前
|
Java 开发工具 计算机视觉
Java使用OpenCV3.2实现视频读取与播放
Java使用OpenCV3.2实现视频读取与播放
61 0
|
5月前
|
前端开发 Java Maven
java集成opencv(不踩坑),实现人脸检测小demo(含上传人像图片识别接口),windows,IDEA,Springboot
java集成opencv(不踩坑),实现人脸检测小demo(含上传人像图片识别接口),windows,IDEA,Springboot
885 0
|
10月前
|
Java 开发工具 计算机视觉
java swing 人脸签到系统 ----- 调用 opencv 多线程
java swing 人脸签到系统 ----- 调用 opencv 多线程
85 0
|
机器学习/深度学习 算法 Java
Java使用OpenCV进行图像操作
OpenCV是一个开源的计算机视觉库,它提供了一系列丰富的图像处理和计算机视觉算法,包括图像读取、显示、滤波、特征检测、目标跟踪等功能。
3507 2
|
Java Maven
java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_Mat(IIILjava/nio/ByteBuffer;)J [duplicate]
java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_Mat(IIILjava/nio/ByteBuffer;)J [duplicate]
|
Java 计算机视觉
|
Java Linux 计算机视觉
全网首发:Java在LINUX上系统上加载OpenCV so库的范例代码
全网首发:Java在LINUX上系统上加载OpenCV so库的范例代码
493 0
|
Java Linux 计算机视觉
全网首发:Linux自带opencv库的JAVA调用失败/java.lang.UnsatisfiedLinkError:libopencv_ml.so.405: 无法打开共享对象文件
全网首发:Linux自带opencv库的JAVA调用失败/java.lang.UnsatisfiedLinkError:libopencv_ml.so.405: 无法打开共享对象文件
617 0