提取DICOMDIR切片转MP4时视频静止偏黄的问题解决
问题分析与解决方案
核心问题定位
- 视频静止:代码错误地仅保留第一帧并复制49次,未使用所有帧的原始数据
- 黄色色调:DICOM灰度转RGB时颜色空间处理错误,且未考虑DICOM窗宽窗位,直接归一化导致颜色偏差
修正后的代码
import numpy as np import pydicom import os import cv2 dicomdir_path = 'dcm_files/DICOMDIR' dicomdir = pydicom.dcmread(dicomdir_path) record = None for record in dicomdir.DirectoryRecordSequence: if record.DirectoryRecordType == 'IMAGE' and record.InstanceNumber == 1: break # 修正路径拼接逻辑,适配多层文件路径 filename = os.path.join(os.path.dirname(dicomdir_path), *record.ReferencedFileID) ds = pydicom.dcmread(filename) num_frames = ds.NumberOfFrames pixel_data = ds.pixel_array # DICOM窗宽窗位处理函数,还原临床视觉效果 def apply_windowing(pixel_array, ds): if 'WindowWidth' in ds and 'WindowCenter' in ds: window_width = float(ds.WindowWidth) window_center = float(ds.WindowCenter) lower = window_center - window_width / 2 upper = window_center + window_width / 2 pixel_array = np.clip(pixel_array, lower, upper) return pixel_array # 逐帧处理:窗宽窗位+归一化 normalized_frames = [] for frame in pixel_data: frame_windowed = apply_windowing(frame, ds) frame_normalized = cv2.normalize(frame_windowed, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U) normalized_frames.append(frame_normalized) pixel_data = np.array(normalized_frames) print(f"帧数据形状:{pixel_data.shape}") fourcc = cv2.VideoWriter_fourcc(*"mp4v") # 兼容无CineRate字段的情况,默认25fps fps = ds.get('CineRate', 25) num_rows, num_cols = pixel_data.shape[1], pixel_data.shape[2] video_writer = cv2.VideoWriter('Output/output.mp4', fourcc, fps, (num_cols, num_rows)) for frame in pixel_data: # 灰度转BGR(OpenCV VideoWriter默认使用BGR格式) frame_bgr = cv2.cvtColor(frame, cv2.COLOR_GRAY2BGR) video_writer.write(frame_bgr) video_writer.release()
关键修改说明
修复视频静止
- 删除
pixel_data = pixel_data[0]和[pixel_data] * num_frames的错误代码,保留所有49帧的原始数据 - 直接遍历原始帧数组生成视频
- 删除
解决黄色色调
- 改用
cv2.COLOR_GRAY2BGR转换颜色空间:OpenCV视频写入默认使用BGR格式,之前的RGB转换会导致红蓝通道反转,出现黄色调 - 新增窗宽窗位处理:DICOM原始像素值为线性数据,直接归一化会丢失细节,应用窗宽窗位后能得到符合视觉习惯的图像
- 改用
鲁棒性优化
- 修正路径拼接逻辑,支持多层嵌套的DICOM文件路径
- 增加
CineRate字段的兼容处理,避免字段缺失导致程序报错
内容的提问来源于stack exchange,提问作者user2381342
相关产品推荐
相关产品推荐

