2014-12-04 4 views
0

이미지의 히스토그램을 그릴 수있는이 간단한 OpenCV 코드가 있습니다.imshow() 및 matplotlib()가 함께 작동하지 않습니다.

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() 

내가 (0) imshow() 후 waitKey를 제거하면, 히스토그램 먼저 그려 도착하고 음모를 닫습니다하지 않는 한, 이미지가 표시되지 않습니다. 이것은 파이썬이나 matplotlib에 특별한 문제입니까?

+1

는 [여기] 설명서를 참조습니까 (http://docs.opencv.org/trunk/doc/py_tutorials/py_gui를 /py_image_display/py_image_display.html)'waitKey'를 사용해야한다고 말하는 것 같습니까? – BrenBarn

+1

cv2.waitKey (1) ## non-blocking – berak

+0

cv2.waitKey (1) 또는 cv2.waitKey (0)가 두 개의 창을 올바르게 표시한다는 것에 동의하지만 5 초 후에 이미지 창의 밝기가 손실됩니다. 파이썬처럼 그 창에서 초점을 잃어 가고 있습니다. 플롯 창을 닫을 때 이미지 창은 밝기를 되 찾습니다. –

답변

1

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() 

(참고 : 나는 다른 이미지 사용) 즉, 쉽게

+0

좋은 접근 방식 ... 고맙습니다 .. –

+0

이 답변으로 문제가 해결되면 [받아 들일 수 있습니다] (http://stackoverflow.com/help/someone-answers). 이것은 또한 다른 사람들에게 (이 주제에 대해) 더 이상의 도움이 필요 없다는 것을 분명히 할 것입니다. – hitzg

관련 문제