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

本文介绍了如何处理多帧的Dcm图片,包括读取和拆分存储。通过概述、实现代码及结果展示,详细阐述了整个过程。
摘要由CSDN通过智能技术生成

1. 概述

在项目中为了保留对之前代码的兼容和加上新功能,需要将多帧的Dcm图像转换为单帧的Dcm图像,近期对其进行了实践。本篇文章中将实现的代码予以分享,不妥之处请见谅。多帧图像

2. 实现代码

之前有两篇博客分别讲了DCMTK在vs上配置过程和读取Dcm图的实现,感兴趣的读者可以看看之前的文章。
//************************************************************************
// 函数名称:    	LoadDcmDataSet
// 访问权限:    	public 
// 创建日期:		2016/11/28
// 创 建 人:		
// 函数说明:		加载Dcm图像返回它的DicomImage
// 函数参数: 	std::string file_path	文件的路径
// 返 回 值:   	DicomImage* $
//************************************************************************
DicomImage* CLoadMutiFrameDcm::LoadDcmDataSet(std::string file_path)
{
	this->filepath = file_path;

	DcmFileFormat fileformat;
	OFCondition oc = fileformat.loadFile(file_path.c_str());                    //读取Dicom图像  
	if (!oc.good())     //判断Dicom文件是否读取成功  
	{
		std::cout << "file Load error" << std::endl;
		return nullptr;
	}
	DcmDataset *dataset = fileformat.getDataset();                              //得到Dicom的数据集  
	E_TransferSyntax xfer = dataset->getOriginalXfer();                          //得到传输语法  

	OFString patientname;
	dataset->findAndGetOFString(DCM_PatientName, patientname);                   //获取病人姓名  

	unsigned short bit_count(0);
	dataset->findAndGetUint16(DCM_BitsStored, bit_count);                        //获取像素的位数 bit  

	OFString isRGB;
	dataset->findAndGetOFString(DCM_PhotometricInterpretation, isRGB);           //DCM图片的图像模式  

	unsigned short img_bits(0);
	dataset->findAndGetUint16(DCM_SamplesPerPixel, img_bits);                    //单个像素占用多少byte  
	this->Img_bitCount = (int)img_bits;

	OFString framecount;
	dataset->findAndGetOFString(DCM_NumberOfFrames, framecount);				//DCM图片的帧数  
	

	//DicomImage* img_xfer = new DicomImage(xfer, 0, 0, 1);                     //由传输语法得到图像的帧  

	unsigned short m_width;                                                     //获取图像的窗宽高  
	unsigned short m_height;
	dataset->findAndGetUint16(DCM_Rows, m_height);
	dataset->findAndGetUint16(DCM_Columns, m_width);

	/  
	const char* transferSyntax = NULL;
	fileformat.getMetaInfo()->findAndGetString(DCM_TransferSyntaxUID, transferSyntax);       //获得传输语法字符串  
	string losslessTransUID = "1.2.840.10008.1.2.4.70";
	string lossTransUID = "1.2.840.10008.1.2.4.51";
	string losslessP14 = "1.2.840.10008.1.2.4.57";
	string lossyP1 = "1.2.840.10008.1.2.4.50";
	string lossyRLE = "1.2.840.10008.1.2.5";
	if (transferSyntax == losslessT
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值