Pydicom读取dcm格式视频

dicom文件的相关处理是小众需求,这两天毕业设计需要处理dcm视频,视频相比于图像更是小众中的小众,无奈找了全网也没几个人写教程。 虽然事实上很简单,但是在着急完成项目的时候很难静下心来研究,毕竟人家真不一定做了这功能。

本文需要用到:

  1. Pydicom读取dcm视频
  2. Opencv格式转换

Pydicom的官方文档也没有提到视频处理,不过方法就是探索出的。 我们根据官方文档中的读取dcm图片的方法

import pydicom
import cv2
dataset = pydicom.dcmread(filename)

此时dataset中就有dcm视频的全部信息了,然后视频的图像信息储存在dataset.pixel_array中,shape为(总帧数,长,宽,位深)可以通过遍历dataset.pixel_array.shape[0]遍历每张图片

for i in range(dataset.pixel_array.shape[0]):
	img = dataset.pixel_array[i]

最后是转换成视频,本文是用的是opencv的方法,需要额外进行一步rgb转bgr。 以下是全部代码

import pydicom
import cv2
import numpy as np

filename = D:\dcm\1.dcm  # 名字为举例
dataset = pydicom.dcmread(filename)
videoname = filename.replace(.dcm, .avi)
videoWriter = cv2.VideoWriter(videoname, cv2.VideoWriter_fourcc(*MJPG), 30, (640, 480))  
# 30为帧数,(640, 480)为长宽

for i in range(dataset.pixel_array.shape[0]):
    img = dataset.pixel_array[i]
    img = np.array(img)  # 印象里cv读的图片是array格式,如果不必要可以删去
    r, g, b = cv2.split(img)
    img = cv2.merge([b, g, r])  # rgb转换gbr
    img = cv2.resize(img, (640, 480))  # 此处最好resize,因为size不一样写不进去
    videoWriter.write(img)
videoWriter.release()

基本完成 缺点是似乎没法转成mp4,只能转成avi之类的,不过这个转换工具就多了,也可以自己寻找其他教程

经验分享 程序员 微信小程序 职场和发展