c#opencv检测图片变化代码
时间: 2023-07-07 18:31:45 浏览: 141
以下是使用C#和OpenCVSharp库实现图像差分检测图片变化的代码示例:
```csharp
using System;
using OpenCvSharp;
class ImageDifference
{
static void Main(string[] args)
{
// 读取两张图片
Mat img1 = Cv2.ImRead("image1.jpg", ImreadModes.GrayScale);
Mat img2 = Cv2.ImRead("image2.jpg", ImreadModes.GrayScale);
// 计算差分图像
Mat diffImg = new Mat();
Cv2.Absdiff(img1, img2, diffImg);
// 二值化处理
Mat threshImg = new Mat();
Cv2.Threshold(diffImg, threshImg, 50, 255, ThresholdTypes.Binary);
// 形态学处理
Mat kernel = Cv2.GetStructuringElement(MorphShapes.Rect, new Size(3, 3));
Cv2.MorphologyEx(threshImg, threshImg, MorphTypes.Open, kernel);
// 轮廓检测
Point[][] contours;
HierarchyIndex[] hierarchy;
Cv2.FindContours(threshImg, out contours, out hierarchy, RetrievalModes.External, ContourApproximationModes.ApproxSimple);
// 绘制变化区域
Mat resultImg = new Mat();
Cv2.CvtColor(img2, resultImg, ColorConversionCodes.GRAY2BGR);
for (int i = 0; i < contours.Length; i++)
{
Cv2.DrawContours(resultImg, contours, i, Scalar.Red, 2);
}
// 显示结果
Cv2.ImShow("Result", resultImg);
Cv2.WaitKey(0);
Cv2.DestroyAllWindows();
}
}
```
以上代码中,我们首先读取了两张图片,然后计算了它们的差分图像,并对差分图像进行了二值化、形态学处理和轮廓检测,最终得到了变化的轮廓,然后在原图上绘制出了变化区域。您可以根据实际情况对代码进行修改和优化。
阅读全文