用 Python 读入一幅灰度图像(缩放到 50x50 像素),计算该图像每个像素的水平和垂直梯度,梯度幅值和梯度角,观察输出矩阵值,并进行可视化。
时间: 2023-06-03 14:08:00 浏览: 139
好的,这个问题属于计算机视觉领域,我可以回答。您可以使用Python的OpenCV库来读入灰度图像,并使用Sobel算子计算每个像素的水平和垂直梯度,然后通过计算梯度幅值和梯度角来得到输出矩阵值。最后,您可以使用Matplotlib库进行可视化。下面是代码示例:
```python
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读入灰度图像并进行缩放
img = cv2.imread('image.jpg', 0)
img = cv2.resize(img, (50, 50))
# 计算水平和垂直梯度
sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=5)
sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=5)
# 计算梯度幅值和梯度角
magnitude = np.sqrt(sobelx**2 + sobely**2)
angle = np.arctan2(sobely, sobelx)
# 输出矩阵值
print('Magnitude:\n', magnitude)
print('Angle:\n', angle)
# 可视化
plt.subplot(131), plt.imshow(img, cmap='gray')
plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(132), plt.imshow(magnitude, cmap='gray')
plt.title('Magnitude'), plt.xticks([]), plt.yticks([])
plt.subplot(133), plt.imshow(angle, cmap='gray')
plt.title('Angle'), plt.xticks([]), plt.yticks([])
plt.show()
```
执行以上代码后,您将得到计算出的梯度幅值和梯度角的值,并且会显示原始图像、梯度幅值和梯度角可视化的结果。
阅读全文