用 Python 读入一幅灰度图像(缩放到 50x50 像素),计算该图像每个像素的水平和垂直梯度,梯度幅值和梯度角,观察输出矩阵值,并进行可视化。
时间: 2024-06-10 10:06:46 浏览: 64
好的,这个问题涉及图像处理和计算机视觉技术,我可以为您解答。以下是 Python 代码示例,实现对灰度图像的梯度计算和可视化:
```python
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读入灰度图像
img = cv2.imread('image.png', cv2.IMREAD_GRAYSCALE)
# 缩放到 50x50 像素
img = cv2.resize(img, (50, 50))
# 水平和垂直梯度计算
grad_x = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
grad_y = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
# 梯度幅值和梯度角计算
grad_magnitude, grad_angle = cv2.cartToPolar(grad_x, grad_y, angleInDegrees=True)
# 输出矩阵值
print("Gradient Magnitude:")
print(grad_magnitude)
print("Gradient Angle:")
print(grad_angle)
# 可视化梯度图像
plt.subplot(1, 3, 1)
plt.imshow(img, cmap='gray')
plt.title('Original Image')
plt.xticks([])
plt.yticks([])
plt.subplot(1, 3, 2)
plt.imshow(grad_magnitude, cmap='gray')
plt.title('Gradient Magnitude')
plt.xticks([])
plt.yticks([])
plt.subplot(1, 3, 3)
plt.imshow(grad_angle, cmap='hsv')
plt.title('Gradient Angle')
plt.xticks([])
plt.yticks([])
plt.show()
```
这段代码中,我们使用了 OpenCV 和 Matplotlib 两个库来实现图像处理和可视化。我们先读入灰度图像,并将其缩放到 50x50 像素,并通过 Sobel 算子计算出水平和垂直梯度。然后使用 cartToPolar 函数计算梯度幅值和梯度角,并输出矩阵值。最后使用 Matplotlib 可视化梯度图像,包括原始图像、梯度幅值和梯度角。运行代码后,您可以观察到输出矩阵和可视化结果。
阅读全文