opencv将两张图片对比不同的地方使用红色进行圈出
时间: 2024-02-12 08:06:52 浏览: 132
可以使用OpenCV中的absdiff函数进行图像差分,然后结合findContours和drawContours函数来绘制不同之处的轮廓,并用红色圈出。以下是相应的C++代码:
```cpp
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img1 = imread("input1.jpg");
Mat img2 = imread("input2.jpg");
Mat diff, thresh;
// 计算两张图像的差分
absdiff(img1, img2, diff);
cvtColor(diff, diff, COLOR_BGR2GRAY);
// 对差分图像进行二值化
threshold(diff, thresh, 50, 255, THRESH_BINARY);
// 查找轮廓
std::vector<std::vector<Point> > contours;
findContours(thresh, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
// 在原图像上绘制轮廓
for (size_t i = 0; i < contours.size(); i++)
{
Rect rect = boundingRect(contours[i]);
rectangle(img1, rect, Scalar(0,0,255), 2);
}
// 显示结果
imshow("Diff", diff);
imshow("Result", img1);
waitKey(0);
return 0;
}
```
这个代码会加载两张输入图像,计算它们的差分,然后对差分图像进行二值化,查找轮廓,并在输入图像上绘制轮廓。其中,红色矩形框表示不同的区域。
阅读全文