首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Dicom到PNG的转换-输出图像是完全黑色的

Dicom到PNG的转换-输出图像是完全黑色的
EN

Stack Overflow用户
提问于 2021-07-28 16:13:44
回答 2查看 149关注 0票数 1

同时使用Python将dicom转换为png,没有得到任何错误。输出文件是完整的黑色,尽管图像数组具有变量值。

代码:

代码语言:javascript
运行
复制
import pydicom
import cv2
import os

dicom = pydicom.dcmread(inputdir + f)
# print("dicom", dicom)
img = dicom.pixel_array
print("img", img)
cv2.imwrite(outdir + f.replace('.dcm','.png'),img)

镜像数组(供参考):

代码语言:javascript
运行
复制
[[585 585 570 ... 570 572 570]
[585 585 585 ... 572 575 572]
[585 585 585 ... 553 568 575]
...
[854 854 854 ... 778 783 787]
[854 854 856 ... 783 785 787]
[854 856 856 ... 785 790 759]]
EN

回答 2

Stack Overflow用户

发布于 2021-07-28 17:11:31

根据docs.opencv.org的说法,cv2.imwrite通常“首选”图像数据为8位表示形式(即,值的范围仅为0到255 )。

在一般情况下,只有8位单通道或3通道(具有'BGR‘通道顺序)图像可以保存使用此功能...

我注意到您的图像数据超过8位,因此您需要(a)缩放它然后将其转换为np.uint8,或者(b)将位表示减少到8位。

(a)缩放的示例:

代码语言:javascript
运行
复制
import numpy as np  # assuming that you have numpy installed
img = np.array(img, dtype = float) 
img = (img - img.min()) / (img.max() - img.min()) * 255.0  
img = img.astype(np.uint8)
cv2.imwrite(outdir + f.replace('.dcm','.png'),img)

或者,(b)位移位到8位的例子:

代码语言:javascript
运行
复制
bit_depth = 10  #  assuming you know the bit representation
img = np.array(img, dtype = np.uint16)
img = img >> (bit_depth - 8)  
img = img.astype(np.uint8)
cv2.imwrite(outdir + f.replace('.dcm','.png'),img)

但是既然你是用PNG格式保存你的图片,这里有一个更简单的方法...

,但有以下例外:

  • 16位无符号(CV_16U)图像可以保存在PNG、JPEG2000和TIFF formats
  • ...

格式中

您可以将您的图像转换为np.uint16 :)

代码语言:javascript
运行
复制
img = img.astype(np.uint16)
cv2.imwrite(outdir + f.replace('.dcm','.png'),img)
票数 1
EN

Stack Overflow用户

发布于 2021-07-28 16:13:44

在"dicom.pixel_array“之后的代码中添加下一行代码就可以了。

代码语言:javascript
运行
复制
## Rescaling grey scale between 0-255
scaled_img = (np.maximum(img,0) / img.max()) * 255.0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68556710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档