写一段用c opencv 对比两张图片的 找出差异较大的地方
时间: 2023-12-16 09:04:23 浏览: 183
好的,以下是用C++ OpenCV对比两张图片,找出差异较大的地方的代码:
```c
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 读取两张图像
Mat img1 = imread("img1.jpg", IMREAD_GRAYSCALE);
Mat img2 = imread("img2.jpg", IMREAD_GRAYSCALE);
// 对两张图像进行绝对差分
Mat diff;
absdiff(img1, img2, diff);
// 进行二值化处理
Mat binary;
threshold(diff, binary, 30, 255, THRESH_BINARY);
// 进行形态学处理,去除噪点
Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));
morphologyEx(binary, binary, MORPH_OPEN, kernel);
// 寻找轮廓
vector<vector<Point>> contours;
findContours(binary, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
// 绘制边框
Mat draw = Mat::zeros(img1.size(), CV_8UC3);
Scalar color = Scalar(0, 0, 255); // 红色
for (size_t i = 0; i < contours.size(); i++)
{
Rect rect = boundingRect(contours[i]);
if (rect.area() > 500) // 如果面积太小,认为是噪点,忽略
{
rectangle(draw, rect, color, 2);
}
}
// 显示结果
imshow("diff", diff);
imshow("binary", binary);
imshow("draw", draw);
waitKey();
return 0;
}
```
以上代码对两张图像进行绝对差分,再进行二值化处理,接着进行形态学处理去除噪点,最后寻找轮廓并绘制边框。如果你觉得阈值30的二值化效果不理想,可以自行调整。
阅读全文