- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
比较两个形状。
该函数用于比较两个形状。所有三个实现的方法都使用了 Hu 不变矩(参见 HuMoments)
函数原型
double cv::matchShapes
(
InputArray contour1,
InputArray contour2,
int method,
double parameter
)
参数
- 参数contour1 第一个轮廓或灰度图像。
- 参数contour2 第二个轮廓或灰度图像。
- 参数method 比较方法,参见 ShapeMatchModes。
- 参数parameter 方法特定的参数(目前不支持)。
返回值
返回一个表示两个形状相似度的双精度浮点数。数值越小,表示两个形状越相似。
代码示例
#include <iostream>
#include <opencv2/opencv.hpp>
int main()
{
// 定义两个矩形的顶点
std::vector< cv::Point > contour1 = { cv::Point( 0, 0 ), cv::Point( 2, 0 ), cv::Point( 2, 2 ), cv::Point( 0, 2 ) };
std::vector< cv::Point > contour2 = { cv::Point( 1, 1 ), cv::Point( 3, 1 ), cv::Point( 3, 3 ), cv::Point( 1, 3 ) };
// 计算两个轮廓的相似度
double similarity = cv::matchShapes( contour1, contour2, cv::CONTOURS_MATCH_I1, 0.0 );
std::cout << "Similarity between contours: " << similarity << std::endl;
return 0;
}
运行结果
Similarity between contours: 6.66134e-16
得到的结果 6.66134e-16 是一个非常小的数值,接近于零。这意味着根据 cv::matchShapes 函数的计算,两个轮廓之间的相似度非常高,几乎完全相同。在数值计算中,如此小的数值通常表示两个对象之间几乎没有差异。