我尝试使用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条答案
按热度按时间wwtsj6pe1#
我遇到了类似的问题。使用
exposure.equalize_adapthist()
(source)。结果图像不是百分之百的,你会看到使用DICOM查看器,但它是最好的,我能得到的。ddhy6vgd2#
我已经想出了一个让图像显示出来的方法,正如Dan在评论中提到的,矩阵的值被按比例缩小了,由于imshow函数的原因,输出太暗,人眼无法区分。所以,最后我唯一需要做的就是把整个垫子数据乘以128。现在图像显示得很完美。将矩阵乘以255会使图片曝光,并导致某些功能崩溃。2以下是修改后的代码。
j8yoct9x3#
我不认为这是一个正确的答案。它适用于特定的图像,因为你的大多数像素值都在较低的范围内。检查这个OpenCV: How to visualize a depth image。它是为c++,但很容易适应Python。
uqjltbpv4#
这是在opencv中将image作为numpy数组打开同时保持图像质量的最佳方法(在我看来):