我有这个简单的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的特殊问题吗?
答案 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()
(注意:我使用了不同的图像)