使用pyplot绘制直方图时如何添加垂直线

6

我已经计算了Kinect深度图像的Otsu阈值,现在我想使用Pyplot中的axvline来指出直方图上的最佳阈值值,在OpenCV2中进行操作。

我是一个Python初学者,这是我代码的具体部分:

fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(8, 2.5))
ax1.imshow(img)
ax1.set_title('Original')
ax1.axis('off')

ax2.hist(img)
ax2.set_title('Histogram')
plt.axvline(x=thresh, color='r', linestyle='dashed', linewidth=2)

ax3.imshow(binary, cmap=plt.cm.gray)
ax3.set_title('Thresholded')
ax3.axis('off')

plt.show()

但是我不知道为什么,在二值化的图像上出现了竖线。我做错了什么吗?谢谢。

1
也许你应该在ax2上调用axvline而不是调用pyplot方法? - xnx
是的,我已经使用ax2.axvline做过了,但我得到了一条看不见的白线而不是红色的线。。为什么? - Giulio
1个回答

10

适用于我:

from scipy.misc import imread, imresize
import matplotlib.pyplot as plt
f = r"C:\Users\Public\Pictures\Sample Pictures\Lighthouse.jpg"
img = imread(f)[:, :, 0]
fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(8, 2.5))
ax1.imshow(img)
ax1.set_title('Original')
ax1.axis('off')

thresh = 100
ax2.hist(img)
ax2.set_title('Histogram')
ax2.axvline(x=thresh, color='r', linestyle='dashed', linewidth=2)

ax3.imshow(img, cmap=plt.cm.gray)
ax3.set_title('Thresholded')
ax3.axis('off')

plt.show()

输入图片说明


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接