You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中保存编辑后的.nrrd文件失败(含报错),求解决方法

解决NRRD文件调整尺寸后保存失败的问题

问题重现

运行以下代码保存调整尺寸后的NRRD文件时出现报错:

!pip install pynrrd
import numpy as np
import nrrd
import cv2
from PIL import Image
import matplotlib.pyplot as plt

readdata,header = nrrd.read("/content/drive/MyDrive/Colab Notebooks/Image/imagingVolume .nrrd")
print('readdata: ', readdata.shape) #(256,256,30)

readdata = cv2.resize(readdata,(192,256))
readdata = np.transpose(readdata, (2,0,1))
print(readdata.shape) #(30,256,192)
cv2.imwrite("/content/drive/MyDrive/Colab Notebooks/","reshaped.nrrd")

报错信息:

Overload resolution failed:
- img is not a numpy array, neither a scalar
- Expected Ptr<cv::UMat> for argument 'img'

错误原因

  1. 参数顺序错误:cv2.imwrite的第一个参数需要是完整的文件路径(包含文件名),你把路径和文件名拆成两个参数传入,导致函数识别错误。
  2. 工具不匹配:cv2.imwrite仅支持保存2D图像格式(如PNG、JPG),无法处理3D的NRRD医学图像格式,必须使用pynrrd库的nrrd.write方法。

修正后的代码

!pip install pynrrd
import numpy as np
import nrrd
import cv2

# 读取NRRD文件
readdata, header = nrrd.read("/content/drive/MyDrive/Colab Notebooks/Image/imagingVolume .nrrd")
print('原始数据形状: ', readdata.shape) #(256,256,30)

# 调整尺寸:注意cv2.resize的尺寸参数是(width, height),对应原数组的后两个维度
readdata = cv2.resize(readdata, (192, 256))
# 转置为NRRD常用的(z, y, x)维度顺序
readdata = np.transpose(readdata, (2, 0, 1))
print('调整后数据形状: ', readdata.shape) #(30,256,192)

# 更新header中的尺寸信息,确保与新数据匹配
header['sizes'] = readdata.shape

# 使用nrrd.write保存文件,传入完整路径
nrrd.write("/content/drive/MyDrive/Colab Notebooks/reshaped.nrrd", readdata, header)

关键说明

  • 调整数据尺寸后,必须同步更新NRRD的header信息(尤其是sizes字段),否则后续读取文件时会出现维度不匹配的问题。
  • 始终使用nrrd.write处理NRRD格式文件,避免用图像类工具保存3D医学数据。

内容的提问来源于stack exchange,提问作者Aditya Kamath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 22:00:57