写一个可以匹配-15度 到+15度角度和灰度的OPENCVSHARP 实例
时间: 2023-05-27 12:01:45 浏览: 126
以下是一个可以匹配-15度到15度角度和灰度的OPENCVSHARP实例:
```csharp
using OpenCvSharp;
class Program
{
static void Main(string[] args)
{
// 读取原始图片
Mat src = Cv2.ImRead("image.jpg");
// 旋转-15~15度进行匹配
for (int angle = -15; angle <= 15; angle++)
{
// 旋转图片
Mat rotated = new Mat();
Cv2.GetRotationMatrix2D(new Point2f(src.Width / 2, src.Height / 2), angle, 1).Transform(src, rotated);
// 将旋转后的图片转化为灰度图像
Mat gray = new Mat();
Cv2.CvtColor(rotated, gray, ColorConversionCodes.BGRA2GRAY);
// 进行匹配
Mat template = Cv2.ImRead("template.jpg", ImreadModes.GrayScale);
Mat result = new Mat();
Cv2.MatchTemplate(gray, template, result, TemplateMatchModes.CCoeffNormed);
// 获取最大值和位置
double minVal, maxVal;
Point minLoc, maxLoc;
Cv2.MinMaxLoc(result, out minVal, out maxVal, out minLoc, out maxLoc);
// 绘制匹配结果信息
Cv2.Rectangle(rotated, new Rect(maxLoc.X, maxLoc.Y, template.Width, template.Height), Scalar.Red, 2);
Cv2.PutText(rotated, $"Angle: {angle}", new Point(10, 50), HersheyFonts.HersheyPlain, 1, Scalar.Yellow, 2);
Cv2.PutText(rotated, $"Max Value: {maxVal}", new Point(10, 100), HersheyFonts.HersheyPlain, 1, Scalar.Yellow, 2);
Cv2.ImShow("Match Result", rotated);
Cv2.WaitKey();
}
Cv2.DestroyAllWindows();
}
}
```
该实例中,首先读取了原始图片,然后循环旋转角度进行匹配。每次旋转后,将图片转化为灰度图像,然后使用 `Cv2.MatchTemplate` 进行匹配,获取最大值和位置,最后将匹配结果信息绘制在图片中并展示出来。
注意:在该实例中,原始图片和模板图片需要是灰度图像,并且要求匹配的角度范围为-15度到15度。如果需要匹配其他角度或彩色图像,请根据实际情况修改代码。
阅读全文