Pydicom讀取dcm格式視訊,格式轉換
寫本文的初衷是不想用dicom的付費軟體格式轉換,此處特指RadiAnt dicom viewer,找到的免費軟體又沒有這功能。
dicom檔案的相關處理是小衆需求,這兩天畢業設計需要處理dcm視訊,視訊相比于圖像更是小衆中的小衆,無奈找了全網也沒幾個人寫教程。
雖然事實上很簡單,但是在着急完成項目的時候很難靜下心來研究,畢竟人家真不一定做了這功能。
本文需要用到:
- Pydicom讀取dcm視訊
- 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之類的,不過這個轉換工具就多了,也可以自己尋找其他教程