2016-08-03 2 views
2

개체 바운딩 박스를 확인하기 위해이 코드를 작성했지만 titleaxes에 지정하면 표시되지 않습니다. (나는 파일 번호를 제목으로 줄 예정이었다). 문제가 무엇인지를 테스트하기pyplot 축 제목이 표시되지 않습니다.

#!/home/ckim/anaconda2/bin/python 
#%pylab 
import os.path as osp 
import sys 
import cv2 
import matplotlib 
import matplotlib.pyplot as plt 
import matplotlib.patches as patches 

def add_path(path): 
    if path not in sys.path: 
     sys.path.insert(0, path) 

def move_figure(f, x, y): 
    backend = matplotlib.get_backend() 
    f.canvas.manager.window.move(x,y) 
    plt.show() 

# Add lib to PYTHONPATH 
lib_path = osp.join('/home/ckim/Neuro/py-faster-rcnn/', 'lib') 
add_path(lib_path) 

import datasets 
import datasets.pascal_voc as pv 

#plt.ion() 
fig, ax = plt.subplots(figsize=(8,8)) 
im = cv2.imread(osp.join('/home/ckim/Neuro/py-faster-rcnn/data/VOCdevkit2007/VOC2007/JPEGImages/', '{0:06d}'.format(eval(sys.argv[1])) + '.jpg')) 
#im = cv2.imread(osp.join('000005.jpg')) 
im = im[:, :, (2, 1, 0)] 
ax.imshow(im, aspect='equal') 
#res = pv._load_pascal_annotation(sys.argv[1]) 
d = datasets.pascal_voc('trainval', '2007') 
res = d._load_pascal_annotation('{0:06d}'.format(eval(sys.argv[1]))) 

#  return {'boxes' : boxes, 
#    'gt_classes': gt_classes, 
#    'gt_overlaps' : overlaps, 
#    'flipped' : False} 

for i in range(len(res['boxes'])): 
    x1 = res['boxes'][i][0] 
    y1 = res['boxes'][i][1] 
    x2 = res['boxes'][i][2] 
    y2 = res['boxes'][i][3] 
    ax.add_patch(patches.Rectangle((x1,y1), x2-x1, y2-y1, fill=False, edgecolor='red', linewidth=1.5)) 
    ax.text(x1, y1 - 5, '{:s}'.format(d._classes[res['gt_classes'][i]]), \ 
     bbox=dict(facecolor='blue', alpha=0.5), fontsize=14, color='white') 
#thismanager = get_current_fig_manager() 
#thismanager.window.SetPosition((500, 0)) 
#thismanager.window.wm_geometry("+500+0") 
move_figure(fig, 500, 500) 
#fig.show() 
#fig.suptitle("Title x") 
ax.set_title("Title x") 
plt.pause(0) 

enter image description here 는, I는 이하의 코드를 감소하지만 요약본 작동 중 그래프 플롯 (케이스 1) 및 화상 표시 (케이스 2)에 대한. 위 코드와 다른 점을 찾을 수 없습니다. 누구든지 위의 코드에서 잘못된 점을 알 수 있습니까? 도면은 도시 된 수단에 move_figureplt.show() 호출이 존재

#!/home/ckim/anaconda2/bin/python 

import cv2 
import matplotlib.pyplot as plt 

fig, ax = plt.subplots(figsize=(8,8)) 

# case 1 : plot 
#ax.plot([1,2,3,4],[1,4,9,16]) 

# case 2 : image display 
im = cv2.imread('000005.jpg') 
im = im[:, :, (2, 1, 0)] 
ax.imshow(im, aspect='equal') 

ax.set_title("Title x") 
plt.pause(0) 

enter image description here

+0

'ax.set_title'을 호출하기 전에'move_figure'가'plt.show'를 호출하지 않습니까? 해결 방법은'move_figure (...) '전에'ax.set_title ("Title x")'를 이동하는 것입니다. 그렇지 않다면 어쩌면 당신은 캔버스로 제목을 덮었을 것입니다 ... –

+0

@EdSmith, 맞아요. (나는 plt.show 전에 ax.set_title을 움직였다.) 나는 plt.show()가 반영되지 않은 후에 변경을 알지 못했다. 고마워요! (대답으로 이동 한 다음 대답으로 선택) –

+0

문제가 해결되어서 다행입니다. 또한 제목/레이블이 현재 캔버스에 나타나지 않거나 겹쳐지지 않는 이상한 문제가 있습니다 ... 아래에 답변을 추가했습니다. –

답변

0

(약 표제 해주기 도시). 이 코드는 blocking command이므로 더 이상이 코드를 닫지 않으면 코드가 실행되지 않습니다. 따라서 제목이 사라질 때까지 제목이 설정되지 않습니다. 마지막 몇 줄을 다음과 같이 바꿔 넣으면

ax.set_title("Title x") 
move_figure(fig, 500, 500) 
plt.pause(0) 

제목이 표시됩니다. 또는 move_figure에서 plt.show을 제거하여 나중에 언제든지 표시하거나 savefig 등을 표시 할 수 있습니다.

+0

감사합니다. plt.show()가 차단 명령임을 알지 못했습니다. –

관련 문제