当前位置:网站首页 > 技术博客 > 正文

相似度有多高

要

比较

Java OpenCV中的两个

轮廓

相似度

,可以使用`Imgproc.matchShapes()`方法。该方法可以计算两个

轮廓

之间的距离,并返回一个值,该值越小表示两个

轮廓

相似

。下面是一个示例代码:

 import org.opencv.core.*; import org.opencv.imgproc.*;  public class ContourSimilarity { public static void main(String[] args) { System.loadLibrary(Core.NATIVE_LIBRARY_NAME);  // 读取两个 轮廓 Mat contour1 = Imgcodecs.imread("contour1.jpg"); Mat contour2 = Imgcodecs.imread("contour2.jpg");  // 转换为灰度图像 Mat gray1 = new Mat(); Mat gray2 = new Mat(); Imgproc.cvtColor(contour1, gray1, Imgproc.COLOR_BGR2GRAY); Imgproc.cvtColor(contour2, gray2, Imgproc.COLOR_BGR2GRAY);  // 二值化处理 Mat binary1 = new Mat(); Mat binary2 = new Mat(); Imgproc.threshold(gray1, binary1, 128, 255, Imgproc.THRESH_BINARY); Imgproc.threshold(gray2, binary2, 128, 255, Imgproc.THRESH_BINARY);  // 查找 轮廓 Mat hierarchy1 = new Mat(); Mat hierarchy2 = new Mat(); List<MatOfPoint> contours1 = new ArrayList<>(); List<MatOfPoint> contours2 = new ArrayList<>(); Imgproc.findContours(binary1, contours1, hierarchy1, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); Imgproc.findContours(binary2, contours2, hierarchy2, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);  // 计算 轮廓 相似度 double similarity = Imgproc.matchShapes(contours1.get(0), contours2.get(0), Imgproc.CONTOURS_MATCH_I1, 0);  System.out.println(" 轮廓 相似度 :" + similarity); } } 

在这个示例中,我们首先读取了两个

轮廓

图像,并将它们转换为灰度图像和二值化图像。然后,我们使用`findContours()`方法找到

轮廓

,并使用`matchShapes()`方法计算它们之间的

相似度

。最后,我们将

相似度

打印到控制台上。请注意,这里我们只

比较

了每个图像的第一个

轮廓

,如果需要

比较

多个

轮廓

,可以在`findContours()`方法中使用不同的参数来获取所有

轮廓

版权声明


相关文章:

  • java入门级项目2025-03-18 09:30:05
  • java中构造器的写法2025-03-18 09:30:05
  • 2019版unity中vuforia2025-03-18 09:30:05
  • 用户线接口电路工作过程2025-03-18 09:30:05
  • 图像滤波的主要目的是什么?主要方法有哪些?2025-03-18 09:30:05
  • 分布式缓存redis 方案2025-03-18 09:30:05
  • matlab plot函数详解2025-03-18 09:30:05
  • 命名实体识别算法2025-03-18 09:30:05
  • stm32模拟iic驱动oled2025-03-18 09:30:05
  • java流式编程原理2025-03-18 09:30:05