2

我正在尝试使用 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 的清晰格式?

4

3 回答 3

4

面临类似的问题。使用exposure.equalize_adapthist()来源)。生成的图像不是您使用 DICOM 查看器看到的 100%,但它是我能得到的最好的图像。

import numpy as np
import cv2
import pydicom as dicom
from skimage import exposure

ds=dicom.dcmread('sample.dcm')
dcm_sample=ds.pixel_array
dcm_sample=exposure.equalize_adapthist(dcm_sample)
cv2.imshow('sample image dicom',dcm_sample)

cv2.waitkey()
于 2020-02-14T04:55:55.540 回答
1

我想出了一种方法来显示图像。正如 Dan 在评论中提到的,矩阵的值被按比例缩小,并且由于 imshow 功能,输出太暗,人眼无法区分。所以,最后我唯一需要做的就是将整个垫子数据乘以 128。图像现在完美显示。将矩阵乘以 255 会使图片曝光并导致某些特征被破坏。这是修改后的代码。

import numpy as np
import cv2
import pydicom as dicom

ds=dicom.dcmread('sample.dcm')
dcm_sample=ds.pixel_array*128
cv2.imshow('sample image dicom',dcm_sample)

cv2.waitkey()
于 2018-12-11T14:18:09.597 回答
1

我不认为这是一个正确的答案。它适用于该特定图像,因为您的大多数像素值都在较低范围内。检查这个OpenCV:如何可视化深度图像。它适用于 c++,但很容易适应 Python。

于 2019-06-13T19:49:14.580 回答