2017-01-02 4 views
1

Python 3でコードを書いて、DICOM画像上にいくつかのマーカーをプロットする。私は非常に短いプログラムを書いた:画像上でマウスのクリックをプロットする

メインプログラムでは、私は端末からDICOMファイル名を読み、画像をプロットする。

main_prog.py:

import sys 
import dicom as dcm 
import numpy as np 
from matplotlib import pyplot as plt 
from dicomplot import dicomplot as dcmplot 

filename = sys.argv[1] 
dicomfile = dcm.read_file(filename) 
dicomimg = dicomfile.pixel_array 

fig = plt.figure(dpi = 300) 
ax = fig.add_subplot(1, 1, 1) 
plt.set_cmap(plt.gray()) 
plt.pcolormesh(np.flipud(dicomimg)) 
dcm = dcmplot(ax) 

plt.show() 

そして、私は、ユーザーがクリックした座標を格納し、画像上の時間でそれらのそれぞれをプロットするクラスを定義:

dicomplot.py

from matplotlib import pyplot as plt 

class dicomplot(): 
    def __init__(self, img): 
     self.img = img 
     self.fig = plt.figure(dpi = 300) 
     self.xcoord = list() 
     self.ycoord = list() 
     self.cid = img.figure.canvas.mpl_connect('button_press_event', self) 

    def __call__(self, event): 
     if event.button == 1: 
      self.xcoord.append(event.x) 
      self.ycoord.append(event.y) 
      self.img.plot(self.ycoord, self.xcoord, 'r*') 
      self.img.figure.canvas.draw() 
     elif event.button == 2: 
      self.img.figure.canvas.mpl_disconnect(self.cid) 
     elif event.button == 3: 
      self.xcoord.append(-1) 
      self.ycoord.append(-1) 

問題は、画像上をクリックすると、マーカが異なるスケールで表示され、画像の上に表示されないことにあります。

イメージをクリックすると、すべてのマウスクリックが保存され、希望の位置に表示されるように、コードを変更するにはどうすればよいですか?

答えて

1

MouseEventオブジェクトがx/y及びxdata/ydata属性(docs)の両方を運びます。最初のセットは画面座標(左下のピクセル)と2番目のセット(*data)はデータ座標です。 mpldatacursor

関連する問題