使用 opencv 加载图像、转换为灰度并使用 matplotlib 绘图时,我看到了一个奇怪的现象:
from matplotlib import pyplot as plt
import argparse
import cv2
image = cv2.imread("images/image1.jpg")
image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
plt.imshow(image)
Run Code Online (Sandbox Code Playgroud)
就这么简单。
但它给出了如下的“灰度”图:
这是因为 Matplotlib 映射单通道输出的方式。它默认为“感知统一”颜色图:蓝色->黄色;有点像您可能期望热图从蓝色变为红色,但理论上对于人类视觉来说更清晰。
这里有更多细节可能会有所帮助:https : //matplotlib.org/users/colormaps.html
您需要在显示图像时告诉它使用灰色颜色图:
plt.imshow(arr, cmap='gray')
Run Code Online (Sandbox Code Playgroud)
另请参阅此问题:使用 matplotlib 将图像显示为灰度
编辑:另外,请参阅lightalchemist关于混合 RGB 和 BGR的回答!
OpenCV 按照 BGR 的顺序读取图像,因此您应该进行转换
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
Run Code Online (Sandbox Code Playgroud)
其次,您看到的是 Matplotlib 将图像强度显示为热图。只需将所需的颜色映射传递给它的cmap参数
plt.imshow(image, cmap=plt.cm.gray)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4355 次 |
| 最近记录: |