gpt4 book ai didi

java - 如何使用 OpenCV matchShapes 检查两个轮廓是否匹配?

转载 作者:搜寻专家 更新时间:2023-11-01 03:33:13 25 4
gpt4 key购买 nike

我正在尝试检查两张图像中检测到的轮廓是否匹配。我已经看到 OpenCV 有一个名为 matchShapes 的函数,它返回一个相似性度量。然而,它只接收一个 MatPoints,而不是所有的点。在doc example , 它传递给方法第一个 Mat Of Points。

因此,我可以运行此方法,每次传递一个 Mat Of Points 并获取一个度量,但如果我想要一个唯一的相似性度量,我该怎么做呢?

也许遍历所有的 Mat Of Points,应用 matchShapes 并稍后计算平均值?

代码:

var Binarized1:Mat=new Mat()
var Binarized2:Mat=new Mat()
var contours1 = new util.ArrayList[MatOfPoint]()
var contours2 = new util.ArrayList[MatOfPoint]()

//computing thresholds
org.opencv.imgproc.Imgproc.threshold(mole1,Binarized1,0,255,org.opencv.imgproc.Imgproc.THRESH_BINARY_INV+org.opencv.imgproc.Imgproc.THRESH_OTSU)
org.opencv.imgproc.Imgproc.threshold(mole2,Binarized2,0,255,org.opencv.imgproc.Imgproc.THRESH_BINARY_INV+org.opencv.imgproc.Imgproc.THRESH_OTSU)

//finding contours
org.opencv.imgproc.Imgproc.findContours(Binarized1,contours1,new Mat(),org.opencv.imgproc.Imgproc.RETR_EXTERNAL,org.opencv.imgproc.Imgproc.CHAIN_APPROX_NONE)
org.opencv.imgproc.Imgproc.findContours(Binarized2,contours2,new Mat(),org.opencv.imgproc.Imgproc.RETR_EXTERNAL,org.opencv.imgproc.Imgproc.CHAIN_APPROX_NONE)

//matching shapes
var cnt1=contours1.get(0)
var cnt2=contours2.get(0)
print("matching shapes="+ org.opencv.imgproc.Imgproc.matchShapes(cnt1,cnt2,org.opencv.imgproc.Imgproc.CV_CONTOURS_MATCH_I1,0))

我知道有人发布了类似的问题,但没有人为我解决问题。

最佳答案

如果您在两张图片中都有多个轮廓,那么您需要先匹配它们,然后再评估整体相似度。

假设您在两张图片中都有一个正方形和一个圆盘。每个都有两个轮廓,但首先需要将圆盘轮廓与圆盘轮廓相匹配,并将方形轮廓与方形轮廓相匹配。您可以通过对轮廓进行 n*m 比较并存储每个轮廓的对应关系来做到这一点。

之后,您可以定义图像的相似性度量,即每个匹配轮廓的匹配分数的平均值。

关于java - 如何使用 OpenCV matchShapes 检查两个轮廓是否匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41718140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com