- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试检查两张图像中检测到的轮廓是否匹配。我已经看到 OpenCV 有一个名为 matchShapes
的函数,它返回一个相似性度量。然而,它只接收一个 Mat
的 Points
,而不是所有的点。在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/
我想使用 matchShapes() 函数在查询图像中查找对象。 假设我有一本书的模型图像,我想提取它的形状,然后尝试在另一幅图像中找到这本书(它的形状)。 我在谷歌上搜索了很多,但找不到任何关于如何
我试图用matchShapes方法匹配两个轮廓,但是我总是断言失败。 我知道这一定与错误的Mat格式有关,但我似乎无法解决。 findContours运行得很好: vector > contours;
如何使用 OpenCV matchShapes 输出的值?我们实现了 OpenCV matchShapes 函数来比较两个图像,特别是形状。但是当我们得到答案时,我们很困惑如何使用这些值? 代码是 -
根据 matchShapes 文档,输入可以是灰度图像或轮廓。但是当我尝试两张灰度图像时,我得到了断言失败的错误。经过进一步探索,我发现了 here Mat 对象必须是 CV_32FC2 或 CV
下面给出了用于比较 2 个形状的程序代码。 #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp"
我正在使用 matchShapes 来识别一些基本轮廓。但是,无论我比较什么轮廓,它都会返回 0... 模板图片: 示例输入图像: 代码: using std::vector; vector > co
我正在开发一个应用程序,我使用 OpenCV 的 matchShapes() 比较两个图像。 我在 Objective-C 代码中实现的方法如下 - (void) someMethod:(UIImag
我正在尝试检查两张图像中检测到的轮廓是否匹配。我已经看到 OpenCV 有一个名为 matchShapes 的函数,它返回一个相似性度量。然而,它只接收一个 Mat 的 Points,而不是所有的点。
简单介绍一下我在做什么......出于学术目的,我正在使用 opencv 在 c++ 中创建一个应用程序来检测场景中的静态对象。该应用程序基于背景减除和跟踪的组合方法,与对象遗弃相关的事件检测效果很好
我在白板上随机画了一幅画,NAO 机器人拍了一张照片并试图重新创作相同的画。 我的画: NAO 的绘图: 此时我想写一些关于它的结论,特别是我想从两张图片中提取轮廓并使用 OpenCV 函数 cv2.
我是一名优秀的程序员,十分优秀!