imshow()和matplotlib()不能一起工作

时间:2014-12-04 07:26:22

标签: python opencv matplotlib

我有这个简单的OpenCV代码来绘制图像的直方图。

from PIL import Image
from numpy import *
from pylab import *
import cv2

image=cv2.imread('/media/755784/New Volume/DATA/Images/opencv.jpg')

h,w=image.shape[:2]

cv2.imwrite('/media/755784/New Volume/DATA/Images/result.png',image)
print h,w

cv2.imshow("Image",image)
cv2.waitKey(0)## <--

print 'Plotting histogram'
hist=cv2.calcHist(image,[0],None,[256],[0,256])
plt.hist(image.ravel(),256,[0,256])
plt.show()
while True:
    k=cv2.waitKey(30)
    if k==27:
        break
cv2.destroyAllWindows()

当我在imshow()之后删除waitKey(0)时,首先绘制直方图,除非你关闭图,否则不会显示图像。这是python或matplotlib的特殊问题吗?

1 个答案:

答案 0 :(得分:3)

您的plt.show()会阻止代码,因此您无法进入while循环。

但您也可以使用matplotlib绘制图像。这样会更容易:

import matplotlib.pyplot as plt
import cv2

image=cv2.imread('/tmp/stinkbug.png')

fig = plt.figure(figsize=(10,3))
ax1 = plt.subplot(1,2,1)
ax1.imshow(image)
ax2 = plt.subplot(1,2,2)
ax2.hist(image.ravel(),256,[0,256])
plt.show()

(注意:我使用了不同的图像)