用numpy和matplotlib框选两张灰度图差分图像
时间: 2023-07-12 14:07:02 浏览: 130
以两幅灰度图像为输入的 MATLAB 函数.zip
好的,我可以为你编写一个简单的代码,用于使用numpy和matplotlib框选两张灰度图差分图像。请注意,这个代码适用于两张图像大小相同的情况。
首先,我们需要导入必要的库:
```python
import numpy as np
import matplotlib.pyplot as plt
```
接下来,我们可以定义函数来加载和显示灰度图像:
```python
def load_grayscale_image(image_path):
# 读取图像
image = plt.imread(image_path)
# 转换为灰度图像
if len(image.shape) > 2:
image = np.mean(image, axis=2)
# 归一化像素值
image = (image - np.min(image)) / (np.max(image) - np.min(image))
return image
def show_image(image):
plt.imshow(image, cmap='gray')
plt.axis('off')
plt.show()
```
现在,我们可以加载并显示两个图像:
```python
# 加载图像1
image1 = load_grayscale_image('image1.jpg')
show_image(image1)
# 加载图像2
image2 = load_grayscale_image('image2.jpg')
show_image(image2)
```
接下来,我们可以计算两个图像的差异并显示结果:
```python
# 计算差异图像
diff_image = np.abs(image2 - image1)
show_image(diff_image)
```
最后,我们可以使用matplotlib的交互式框选工具来选择感兴趣的区域:
```python
# 创建子图
fig, ax = plt.subplots()
# 显示差异图像
ax.imshow(diff_image, cmap='gray')
ax.axis('off')
# 启用交互式绘图
roi = plt.Rectangle((0, 0), 1, 1, linestyle='--', edgecolor='r', facecolor='none')
ax.add_patch(roi)
plt.title('请用鼠标框选感兴趣区域')
plt.show()
# 等待用户框选区域
roi = plt.ginput(n=2, timeout=-1)
# 计算框选区域
roi = np.array(roi, dtype=np.int)
xmin = np.min(roi[:, 0])
xmax = np.max(roi[:, 0])
ymin = np.min(roi[:, 1])
ymax = np.max(roi[:, 1])
# 显示框选结果
plt.imshow(diff_image[ymin:ymax, xmin:xmax], cmap='gray')
plt.axis('off')
plt.title('框选结果')
plt.show()
```
这个代码将打开一个交互式窗口,提示您使用鼠标框选感兴趣的区域。在您完成选择后,它将显示您选择的区域的差分图像。
阅读全文