opencvsharp的MatchShapes方法讲解
时间: 2024-06-08 20:07:12 浏览: 152
cvMatchShapes例子
OpenCvSharp是C#中的一种图片处理库,其中包含了很多有用的方法,MatchShapes就是其中之一。
MatchShapes方法用于计算两个轮廓的形状相似度,返回值越小说明两个轮廓越相似。具体用法如下:
```csharp
double cv::matchShapes(
InputArray contour1,
InputArray contour2,
int method,
double parameter
);
```
- contour1: 第一个轮廓。
- contour2: 第二个轮廓。
- method: 计算相似度的方法。目前支持三种方法:CV_CONTOURS_MATCH_I1, CV_CONTOURS_MATCH_I2, CV_CONTOURS_MATCH_I3。
- parameter: 方法中的可选参数。
下面简单介绍一下三种计算相似度方法:
- CV_CONTOURS_MATCH_I1:这个方法计算两个轮廓的“Hu 矩”相似度。这个方法对轮廓的旋转和平移比较不敏感,但是对轮廓的缩放比较敏感。
- CV_CONTOURS_MATCH_I2:这个方法计算两个轮廓的“Hu 矩”和比例因子之间的相似度。这个方法对轮廓的缩放比较不敏感。
- CV_CONTOURS_MATCH_I3:这个方法计算两个轮廓的形状相似度。这个方法不考虑轮廓的旋转、平移和缩放。
下面是一个示例代码:
```csharp
using OpenCvSharp;
class Program
{
static void Main(string[] args)
{
Mat src1 = Cv2.ImRead("contour1.jpg", ImreadModes.Grayscale);
Mat src2 = Cv2.ImRead("contour2.jpg", ImreadModes.Grayscale);
Mat canny1 = new Mat();
Cv2.Canny(src1, canny1, 100, 200);
Mat canny2 = new Mat();
Cv2.Canny(src2, canny2, 100, 200);
Point[][] contours1;
HierarchyIndex[] hierarchy1;
Cv2.FindContours(canny1, out contours1, out hierarchy1, RetrievalModes.List, ContourApproximationModes.ApproxSimple);
Point[][] contours2;
HierarchyIndex[] hierarchy2;
Cv2.FindContours(canny2, out contours2, out hierarchy2, RetrievalModes.List, ContourApproximationModes.ApproxSimple);
double matchShapesResult = Cv2.MatchShapes(contours1[0], contours2[0], ShapeMatchModes.I1, 0);
Console.WriteLine($"matchShapesResult: {matchShapesResult}");
Cv2.WaitKey(0);
}
}
```
这个示例代码中,我们首先读入两个图片,然后对它们进行边缘检测得到它们的轮廓。然后使用MatchShapes方法计算它们的相似度,并输出结果。
阅读全文