TypeError: итерация по массиву 0-d с использованием numpy и pydicom - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь создать простую программу просмотра DICOM, в которой я строю изображение, используя matplotlib, и я хочу показать тот же график (который является изображением DICOM) в tkinter, но когда я запускаю код, я получаю эту ошибку.пожалуйста помоги.Ошибка возникает, когда я пытаюсь построить a, но я полагаю, что это связано с тем, как я объявил значения x, y и p

import pydicom
import matplotlib
matplotlib.use('TkAgg')
import numpy as np
from matplotlib.backends.backend_tkagg import 
FigureCanvasTkAgg
from matplotlib.figure import Figure
from tkinter import *
from pydicom.data import get_testdata_files

filename = get_testdata_files('000000.dcm')
dataset = pydicom.dcmread('000000.dcm')
data = dataset.pixel_array

class mclass:
  def __init__(self, window):
    self.window = window
    self.button=Button(window,text="check",command=self.plot)
    self.button.pack()

  def plot (self):
      if 'PixelData' in dataset:
          rows = int(dataset.Rows)
          cols = int(dataset.Columns)
      y=np.array(rows)
      x=np.array(cols)
      p=np.array(data)
      fig = Figure(figsize=(6,6))
      a = fig.add_subplot(111)
      a.plot(p, range(2+max(y)))

      canvas = FigureCanvasTkAgg(fig, master=self.window)
      canvas.get_tk_widget().pack()
      canvas.draw()

window = Tk()
start = mclass (window)
window.mainloop()

1 Ответ

0 голосов
/ 25 февраля 2019

Судя по всему, ваша ошибка заключается здесь:

y=np.array(rows)
...
a.plot(p, range(2+max(y)))

Вы запрашиваете max(y), но ds.Rows и ds.Columns, которые вы используете для создания экземпляров x и yявляются скалярными значениями (и, чтобы быть вдвойне уверенным, вы используете int(ds.Rows)).Это означает, что и x, и y будут являться 0-мерным массивом, и это объясняет сгенерированную ошибку, предположительно в max(y).Попробуйте:

if 'PixelData' in dataset:
      rows = int(dataset.Rows)
      cols = int(dataset.Columns)
  y=rows
  x=cols
  p=np.array(data)
  fig = Figure(figsize=(6,6))
  a = fig.add_subplot(111)
  a.plot(p, range(2+y))
...