[英]Using dicom Images with OpenCV in Python
我正在嘗試使用 dicom 圖像並在 Python 環境中使用 OpenCV 對其進行操作。 到目前為止,我已經使用 pydicom 庫讀取 dicom(.dcm) 圖像數據並使用像素數組屬性使用 OpenCV imshow 方法顯示圖片。 但輸出只是一個空白窗口。 這是我目前正在使用的代碼片段。
import numpy as np
import cv2
import pydicom as dicom
ds=dicom.dcmread('sample.dcm')
cv2.imshow('sample image dicom',ds.pixel_array)
cv2.waitkey()
如果我打印出這里使用的數組,輸出將與我使用普通 numpy 數組得到的不同。 我也嘗試過使用 matplotlib imshow 方法,它能夠顯示帶有一些顏色失真的圖像。 有沒有辦法將數組轉換為 OpenCV 的清晰格式?
我正在嘗試使用 dicom 圖像並在 Python 環境中使用 OpenCV 對其進行操作。 到目前為止我已經使用pydicom庫讀取dicom(.dcm)圖像數據並使用像素數組屬性使用OpenCV imshow方法顯示圖片。 但輸出只是一個空白窗口。 這是我目前正在使用的代碼片段。
import numpy as np
import cv2
import pydicom as dicom
ds=dicom.dcmread('sample.dcm')
cv2.imshow('sample image dicom',ds.pixel_array)
cv2.waitkey()
如果我打印出這里使用的數組,輸出與我使用普通 numpy 數組得到的不同。 我也嘗試過使用 matplotlib imshow 方法,它能夠顯示一些顏色失真的圖像。 有沒有辦法將數組轉換為 OpenCV 的清晰格式?
我正在嘗試使用 dicom 圖像並在 Python 環境中使用 OpenCV 對其進行操作。 到目前為止我已經使用pydicom庫讀取dicom(.dcm)圖像數據並使用像素數組屬性使用OpenCV imshow方法顯示圖片。 但輸出只是一個空白窗口。 這是我目前正在使用的代碼片段。
import numpy as np
import cv2
import pydicom as dicom
ds=dicom.dcmread('sample.dcm')
cv2.imshow('sample image dicom',ds.pixel_array)
cv2.waitkey()
如果我打印出這里使用的數組,輸出與我使用普通 numpy 數組得到的不同。 我也嘗試過使用 matplotlib imshow 方法,它能夠顯示一些顏色失真的圖像。 有沒有辦法將數組轉換為 OpenCV 的清晰格式?
我正在嘗試使用 dicom 圖像並在 Python 環境中使用 OpenCV 對其進行操作。 到目前為止我已經使用pydicom庫讀取dicom(.dcm)圖像數據並使用像素數組屬性使用OpenCV imshow方法顯示圖片。 但輸出只是一個空白窗口。 這是我目前正在使用的代碼片段。
import numpy as np
import cv2
import pydicom as dicom
ds=dicom.dcmread('sample.dcm')
cv2.imshow('sample image dicom',ds.pixel_array)
cv2.waitkey()
如果我打印出這里使用的數組,輸出與我使用普通 numpy 數組得到的不同。 我也嘗試過使用 matplotlib imshow 方法,它能夠顯示一些顏色失真的圖像。 有沒有辦法將數組轉換為 OpenCV 的清晰格式?
這是在 opencv 中將圖像作為 numpy 數組打開同時保持圖像質量的最佳方式(在我看來):
import numpy as np
import pydicom, os, cv2
def dicom_to_numpy(ds):
DCM_Img = ds
rows = DCM_Img.get(0x00280010).value #Get number of rows from tag (0028, 0010)
cols = DCM_Img.get(0x00280011).value #Get number of cols from tag (0028, 0011)
Instance_Number = int(DCM_Img.get(0x00200013).value) #Get actual slice instance number from tag (0020, 0013)
Window_Center = int(DCM_Img.get(0x00281050).value) #Get window center from tag (0028, 1050)
Window_Width = int(DCM_Img.get(0x00281051).value) #Get window width from tag (0028, 1051)
Window_Max = int(Window_Center + Window_Width / 2)
Window_Min = int(Window_Center - Window_Width / 2)
if (DCM_Img.get(0x00281052) is None):
Rescale_Intercept = 0
else:
Rescale_Intercept = int(DCM_Img.get(0x00281052).value)
if (DCM_Img.get(0x00281053) is None):
Rescale_Slope = 1
else:
Rescale_Slope = int(DCM_Img.get(0x00281053).value)
New_Img = np.zeros((rows, cols), np.uint8)
Pixels = DCM_Img.pixel_array
for i in range(0, rows):
for j in range(0, cols):
Pix_Val = Pixels[i][j]
Rescale_Pix_Val = Pix_Val * Rescale_Slope + Rescale_Intercept
if (Rescale_Pix_Val > Window_Max): #if intensity is greater than max window
New_Img[i][j] = 255
elif (Rescale_Pix_Val < Window_Min): #if intensity is less than min window
New_Img[i][j] = 0
else:
New_Img[i][j] = int(((Rescale_Pix_Val - Window_Min) / (Window_Max - Window_Min)) * 255) #Normalize the intensities
return New_Img
file_path = "C:/example.dcm"
image = pydicom.read_file(file_path)
image = dicom_to_numpy(image)
#show image
cv2.imshow('sample image dicom',image)
cv2.waitKey(0)
cv2.destroyAllWindows()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.