DCM图--按SeriesNumber进行分类

原创 2015年11月20日 17:15:57

留后面参考。------将文件中的DCM图按照序列号进行分类,将相同序列号的DCM图移动到与序列号同名的文件中

#include "stdafx.h"
#include <vector>
#include <map>
#include <string>
#include <winsock2.h> 
#include <string>
#include <iostream>
#include <algorithm>
#include <math.h>

#include "dcmtk/dcmdata/dctk.h"
#include "dcmtk/dcmdata/dcxfer.h"
#include "dcmtk/dcmdata/dcrledrg.h"
#include "dcmtk/dcmjpeg/djdecode.h"  /* for dcmjpeg decoders */
#include "dcmtk/dcmimgle/dcmimage.h" /* for DicomImage */
#include "dcmtk/dcmjpeg/dipijpeg.h"  /* for dcmimage JPEG plugin */

#include <Windows.h>   
#include <io.h>
#include <direct.h>
#include <sstream>
extern "C" 
{
#include "jpeglib.h"
}
#pragma comment(lib,"Netapi32.lib")
#pragma comment(lib, "ws2_32.lib")  

using namespace std;

void SplitEx(const string& strOrignal , char ch , vector<string>& vctString)  
{  
    istringstream iss(strOrignal);  
    string item;  
    while(getline(iss , item , ch)) vctString.push_back(item);  
    return;  
} 

DcmFileFormat *pFileFormat = new DcmFileFormat();

bool MoveDcmFile(string strPath)
{
	if(NULL == pFileFormat)
	{
		cout<<"NULL == pFileFormat"<<endl;
		return false;
	}

	OFCondition oc = pFileFormat->loadFile(strPath.c_str());
	if(oc.bad())
	{
		cout<<"no tag: "<<strPath<<endl;
		return false;
	}

	DcmDataset* pDataset = pFileFormat->getDataset();

	int nSeriesNumber = 0;
	OFString strSeriesNumber;

	pDataset->findAndGetOFString(DCM_SeriesNumber, strSeriesNumber);
	nSeriesNumber = atoi(strSeriesNumber.c_str());


	vector<string> vctPathBlock;
	SplitEx(strPath, '\\', vctPathBlock);
	ostringstream oss;//创建一个流
	if(vctPathBlock.size() < 0)
	{
		cout<<"路程错误"<<endl;
		return 0;
	}
	for(int i = 0; i < vctPathBlock.size() - 1; i++)
	{
		oss<<vctPathBlock[i]<<"\\";
	}
	oss<<nSeriesNumber<<"\\";

	//创建保存文件夹
	char *strSaveFilePath = new(std::nothrow)char[oss.str().length() + 1];
	memset(strSaveFilePath, 0, oss.str().length() + 1);
	memcpy(strSaveFilePath, oss.str().c_str(), oss.str().length());
	char *fileName = strSaveFilePath, *tag;
	for(tag=fileName;*tag;tag++)
	{
		if (*tag=='\\')
		{
			char buf[1000],path[1000];
			strcpy(buf,fileName);
			buf[strlen(fileName)-strlen(tag)+1]=NULL;
			strcpy(path,buf);
			if (access(path,6)==-1)
			{
				int npot = 99;
				npot = mkdir(path);//创建成功返回0 不成功返回-1
			}
		}
	}
	delete strSaveFilePath;


	//将DCM图按序列号,移到对应的文件中
	oss<<vctPathBlock[vctPathBlock.size() - 1];
	string strSavePath = oss.str();


	bool bMove = false;
	bMove = MoveFile(strPath.c_str(), strSavePath.c_str());
	//cout<<bMove<<endl;

}

//读取目录下所有的文件
void getFiles( string path, vector<string>& files )
{
	//文件句柄
	long   hFile   =   0;
	//文件信息
	struct _finddata_t fileinfo;
	string p;
	if((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) !=  -1)
	{
		do
		{
			//如果是目录,迭代之
			//如果不是,加入列表
			if((fileinfo.attrib &  _A_SUBDIR))
			{
				if(strcmp(fileinfo.name,".") != 0  &&  strcmp(fileinfo.name,"..") != 0)
					getFiles( p.assign(path).append("\\").append(fileinfo.name), files );
			}
			else
			{
				files.push_back(p.assign(path).append("\\").append(fileinfo.name) );
			}
		}while(_findnext(hFile, &fileinfo)  == 0);
		_findclose(hFile);
	}
}

int _tmain(int argc, _TCHAR* argv[])
{

	string strPath = "D:\\Dtest16\\DICOM\\CT"; //1

	vector<string> vctFilePath;
	getFiles(strPath, vctFilePath);
	for(int i = 0; i < vctFilePath.size(); i++)
	{
		MoveDcmFile(vctFilePath[i]);
	}

	if(NULL != pFileFormat)
	{
		delete pFileFormat;
	}
	return 0;
}


 

 

基于OpenCV的CT图像处理

opencv2.0版本直接使用Mat这个类存储读入的图像
  • wangrongbuaa
  • wangrongbuaa
  • 2014年10月07日 20:21
  • 3602

医学图像数据格式和格式转换

医学图像数据格式和格式转换     由于最近碰到了数据格式的问题,重建不出效果很是头疼,所以简单总结下数据格式相关内容,我的主要开发包是ITK+VTK+QT,所以要说的格式内容基本和VTK相关。...
  • kingmicrosoft
  • kingmicrosoft
  • 2014年06月29日 18:11
  • 9835

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

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

FCM对卫星云图进行云聚类和云分类,自己总结

  • 2014年09月30日 10:09
  • 882KB
  • 下载

DCMTK开源库的学习笔记4:利用ini配置文件对dcm影像进行归档

背景介绍: 医学影像PACS工作站的服务端需要对大量的dcm文件进行归档,写入数据库处理。由于医学图像的特殊性,每一个患者(即所谓的Patient)每做一次检查(即Study)都至少会产生一组图像序...
  • zssureqh
  • zssureqh
  • 2013年04月24日 20:52
  • 5401

利用Python-caffe进行图像分类,卷积核的显示,激活值特征图的显示以及全连接层直方图显示

1:设置python,numpy,matplotlib #设置Python环境:numpy用于数值计算,matplotlib用于画图 # set up Python environment: nump...
  • wei_guo_xd
  • wei_guo_xd
  • 2017年07月19日 17:12
  • 268

怎样在Excel中对数据进行分类汇总

  • 2015年05月04日 16:11
  • 845KB
  • 下载

HK和MSE以及线性分类器对数据进行分类

  • 2017年12月04日 01:31
  • 3KB
  • 下载

多层ELM进行MNIST手写字符分类MATLAB代码

  • 2015年11月02日 20:35
  • 10.97MB
  • 下载

集成方法进行模式分类(Pattern Classification Using Ensemble Methods)

  • 2013年07月13日 21:20
  • 1.96MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DCM图--按SeriesNumber进行分类
举报原因:
原因补充:

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