DCMTK:带有多张图片的dcm文件转成多张QImage与多张图片添加到一个dcm文件

原创 2015年11月18日 19:33:54

随着对DICOM标准慢慢的理解,发现其实带有单张图片的dcm文件与QImage文件的互转并不是一件很难的事情,一般情况下,结果出不来的原因都是对DICOM标准不理解。然而往往一点点理解不够,可能浪费大量的事情,造成很大困扰。

带有多张图的dcm文件转QImage

这个最简单,在原有但张图的dcm文件转QImage文章(http://blog.csdn.net/syz9011/article/details/49777777)的基础上,只要在加上一句话,即可:

……     
> dcmImage->setMinMaxWindow();
> if (dcmImage->getStatus() == EIS_Normal) {
    int count = dcmImage->getFrameCount();
    DicomImage *tempImage = 0;
    for(int i = 0; i < count; i++) {
        image = 0;
        tempImage = dcmImage->createDicomImage(i, 1);
        和上文的DicomImage转QImage的处理方式一样
    }
> }
……

多张图片添加到一个dcm文件中

在添加多张图片到一个dcm文件之前,需要确保几张图片的samplesPerPixel, rows, cols, bitsAlloc, bitsStored, highBit, pixelRepr, planConf等参数均一致。因为无论是bmp图片,还是jpg图片,多张保存到一个dcm文件时,共享相同的DCM_SamplesPerPixel、DCM_Rows等tag,唯一不同的是DCM_PixelData这个tag对应的数据信息。(单张图片转dcm文件链接:http://blog.csdn.net/syz9011/article/details/49785559

多张bmp图片

对于多张bmp图片的转换,比较容易。只需要将每张图片的像素信息连续保存起来,并放置到DCM_PixelData节点信息中即可。

假设一共有3张图片,每张图片的像素点信息保存到pixData中,每张图片的像素点长度为length,最后所有的像素点保存到finalData中,则:


char *finalData = new char[length*3];
memset(finalData, 0, length*3);
for(int i = 0; i < 3; i++) {
    ……获取像素点信息相关,和单张图片转dcm文件一致……
    memcpy(finalData, pixData, length);
    finalData += length;
}
finalData -= 3*length;
cond = dataSet->putAndInsertUint8Array(DCM_PixelData, OFreinterpret_cast(Uint8*, finalData), 3*length);
// 以下为必须内容,否则该dcm文件无论如何,打开只能看到一张图片
std::string temp = QString::number(3).toStdString();
cond = dataSet->putAndInsertString(DCM_NumberOfFrames, temp.c_str());

多张jpg图片

对于多张jpg图片,其实也是只需要将每张图片的像素点信息读取出来之后,添加到pixelSequence中就可以了,不需要再添加额外信息;
假设情况和bmp情况一样,则:

……初始化pixelSequence,并为pixelSequence添加一个offset等,和单张jpg图片转dcm文件一致……
for(int i = 0; i < 3; i++) {
    ……获取每张图片的像素点信息到pixData……
    DcmOffsetList dummyList;
    cond = pixelSequence->storeCompressedFrame(dummyList, OFreinterpret_cast(Uint8*,pixData), length, 0);
}
……然后初始化一个DcmPixelData,并putOriginalRepresentation为pixelSequence,
……然后dataSet->insert(pixelData, OFTrue)即可。
//同多张bmp图片保存一样,以下内容同样不可少:
std::string temp = QString::number(3).toStdString();
cond = dataSet->putAndInsertString(DCM_NumberOfFrames, temp.c_str());

单张图片转dcm链接
只含一张图片的dcm文件转QImage

版权声明:本文为博主原创文章,未经博主允许不得转载。

DCMTK:DCM文件转QImage

代码如下,暂做记录QImage *image = 0; ///register RLE decompression codecs DcmRLEDecoderRegistration::register...
  • syz9011
  • syz9011
  • 2015年11月11日 09:29
  • 773

Qt5.5.0环境下的mingw编译dcmtk 3.6.1_20150924

网上关于mingw编译dcmtk的文章太少,不方便查阅,期间遇到各种问题。特意将整个编译过程记录下来。为了保证所有编译出来的文件方便我在Qt5.5.0中使用,将所有的dcmtk依赖的外部库下载下来并进...
  • syz9011
  • syz9011
  • 2015年11月04日 23:03
  • 974

使用pydicom读取dicom文件,并对文件做一些简单操作

import os import dicom import matplotlib.pyplot as plt def process(dcms): ds = dicom.read_file(d...
  • redmoon729
  • redmoon729
  • 2017年04月11日 18:46
  • 931

DCMTK开源库的学习笔记1:将DCM文件保存成BMP文件或数据流(即数组)

背景介绍: DCMTK是目前最全面实现DICOM3.0标准的开源库,通过结合DCMTK开源库和CxImage图像开源库,能够很方便的开发属于自己的DCM文件编辑浏览软件。 在此利用DCMTK与CxIm...
  • zssureqh
  • zssureqh
  • 2013年04月10日 20:47
  • 11706

多帧Dcm图片的读取与拆分存储

1. 概述 在项目中为了保留对之前代码的兼容和加上新功能,需要将多帧的Dcm图像转换为单帧的Dcm图像,近期对其进行了实践。本篇文章中将实现的代码予以分享,不妥之处请见谅。多帧图像 2. 实现代码 ...
  • m_buddy
  • m_buddy
  • 2016年11月28日 15:41
  • 2130

DCMTK:单张jpg、bmp图像转dcm文件

网上关于相关系列的文章非常的零散,特别不方便查找,于是查看img2dcm的源码,并将其提取出来作为项目需要,特记录于此。前提在dcm文件中,bmp格式图片和jpg格式图片保存方式完全不同,无压缩的bm...
  • syz9011
  • syz9011
  • 2015年11月11日 19:24
  • 2049

DCM示例文件下载网站

http://www.barre.nom.fr/medical/samples/ http://deckard.mc.duke.edu/%7Esamei/tg18#_DOWNLOAD_T...
  • u010752082
  • u010752082
  • 2017年09月04日 18:27
  • 241

import pydicom问题

The pydicom package is importable as dicom until version 0.9.9. The documentation on read the do...
  • u013066730
  • u013066730
  • 2017年01月17日 10:58
  • 1581

利用DCMTK将DCM图像像素数据转换为Mat数据

附: 1. 一个文件夹下的文件名导出到TXT 在windows下进入目标文件夹,在文件夹窗口下按住Shift键,点击鼠标右键选择“在此处打开命令行窗口”,之后再Dos窗口下输入如下命令,将文件夹下的所...
  • m_buddy
  • m_buddy
  • 2016年07月11日 17:26
  • 1173

QImage 与 cv::Mat 之间的相互转换

最近做图像处理方面的项目比较多,很多算法自己从头写的话太浪费时间,而且自己写的也不一定完善,早就听说OpenCV在图像处理算法方面功能很强大,一直没时间学习,这次正好项目用到了,临时抱佛脚学习些Ope...
  • liyuanbhu
  • liyuanbhu
  • 2015年06月27日 16:17
  • 21160
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DCMTK:带有多张图片的dcm文件转成多张QImage与多张图片添加到一个dcm文件
举报原因:
原因补充:

(最多只允许输入30个字)