天天看點

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之類的,不過這個轉換工具就多了,也可以自己尋找其他教程