Pydicom读取dcm格式视频

Pydicom读取dcm格式视频,格式转换


写本文的初衷是不想用dicom的付费软件格式转换,此处特指RadiAnt dicom viewer,找到的免费软件又没有这功能。

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之类的,不过这个转换工具就多了,也可以自己寻找其他教程

你可能感兴趣的:(dicom)