TypeError: итерация по массиву 0-d с использованием numpy и pydicom
Я пытаюсь создать простую программу просмотра 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 ответ
Решение
Судя по всему, ваша ошибка лежит здесь:
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))