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 大视界 -- Java 大数据在智能教育在线考试监考与作弊检测中的技术创新(193)
本文探讨了Java大数据技术在智能教育在线考试监考与作弊检测中的创新应用。随着在线考试的普及,作弊问题日益突出,传统监考方式难以应对。通过Java大数据技术,可实现考生行为分析、图像识别等多维度监控,提升作弊检测的准确性与效率。结合Hadoop与Spark等技术,系统能实时处理海量数据,构建智能监考体系,保障考试公平性,推动教育评价体系的数字化转型。
|
计算机视觉
Opencv学习笔记(八):如何通过cv2读取视频和摄像头来进行人脸检测(jetson nano)
如何使用OpenCV库通过cv2模块读取视频和摄像头进行人脸检测,并提供了相应的代码示例。
426 1
|
10月前
|
XML 机器学习/深度学习 人工智能
使用 OpenCV 和 Python 轻松实现人脸检测
本文介绍如何使用OpenCV和Python实现人脸检测。首先,确保安装了OpenCV库并加载预训练的Haar特征模型。接着,通过读取图像或视频帧,将其转换为灰度图并使用`detectMultiScale`方法进行人脸检测。检测到的人脸用矩形框标出并显示。优化方法包括调整参数、多尺度检测及使用更先进模型。人脸检测是计算机视觉的基础技术,具有广泛应用前景。
440 10
|
存储 算法 Java
Java面试题:深入探究Java内存模型与垃圾回收机制,解释JVM中堆内存和栈内存的主要区别,谈谈对Java垃圾回收机制的理解,Java中的内存泄漏及其产生原因,如何检测和解决内存泄漏问题
Java面试题:深入探究Java内存模型与垃圾回收机制,解释JVM中堆内存和栈内存的主要区别,谈谈对Java垃圾回收机制的理解,Java中的内存泄漏及其产生原因,如何检测和解决内存泄漏问题
170 0
|
机器学习/深度学习 Java 开发工具
【移花接木】OpenCV4.8 For Java 深度学习 实时人脸检测
【移花接木】OpenCV4.8 For Java 深度学习 实时人脸检测
256 0
|
机器学习/深度学习 计算机视觉
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
本文介绍了如何使用OpenCV进行特定区域的目标检测,包括人脸检测实例,展示了两种实现方法和相应的代码。
370 1
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
208 6
|
网络协议 Java
JAVA实现心跳检测【长连接】
这篇文章介绍了Java中实现心跳检测机制的方法,包括心跳机制的简介、实现方式、客户端和服务端的代码实现,以及具体的测试结果。文中详细阐述了如何通过自定义心跳包和超时检测来维持长连接,并提供了完整的客户端和服务端示例代码。
JAVA实现心跳检测【长连接】
|
算法 计算机视觉 Python
圆形检测算法-基于颜色和形状(opencv)
该代码实现了一个圆检测算法,用于识别视频中的红色、白色和蓝色圆形。通过将图像从RGB转换为HSV颜色空间,并设置对应颜色的阈值范围,提取出目标颜色的区域。接着对这些区域进行轮廓提取和面积筛选,使用霍夫圆变换检测圆形,并在原图上绘制检测结果。
467 0
|
监控 算法 安全
Java并发编程案例分析:死锁的检测与解决
Java并发编程案例分析:死锁的检测与解决
156 2