图像比对并把不同地方圈出
时间: 2023-07-04 20:04:07 浏览: 122
要实现图像比对并圈出不同的地方,可以使用Python中的OpenCV库。以下是大致的步骤:
1. 导入需要比对的两张图片,并将它们转换为灰度图像。
```python
import cv2
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
```
2. 对灰度图像进行差异比较,并得到差异图像。
```python
diff = cv2.absdiff(gray1, gray2)
```
3. 对差异图像进行二值化处理,使得差异部分变成白色,其他部分为黑色。
```python
_, thresh = cv2.threshold(diff, 30, 255, cv2.THRESH_BINARY)
```
4. 对二值化后的图像进行腐蚀和膨胀操作,以去除噪声和连接分离的差异区域。
```python
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
thresh = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel)
```
5. 在原始图像上标记出差异区域,并在差异区域周围画一个红色的矩形框。
```python
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
(x, y, w, h) = cv2.boundingRect(contour)
cv2.rectangle(img1, (x, y), (x+w, y+h), (0, 0, 255), 2)
```
6. 最后,将画好矩形框的图片显示出来。
```python
cv2.imshow('result', img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
完整代码如下:
```python
import cv2
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
diff = cv2.absdiff(gray1, gray2)
_, thresh = cv2.threshold(diff, 30, 255, cv2.THRESH_BINARY)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
thresh = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel)
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
(x, y, w, h) = cv2.boundingRect(contour)
cv2.rectangle(img1, (x, y), (x+w, y+h), (0, 0, 255), 2)
cv2.imshow('result', img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文