1 配置
http://www.voidcn.com/blog/zssureqh/article/p-1188605.html
2 dicom数据理解
http://blog.csdn.net/zssureqh/article/details/8785132
3 帮助文档之数据读取参考例子
http://support.dcmtk.org/docs/mod_dcmdata.html
4 读取基本数据及pixdata数据测试
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
#include "dcmtk/dcmdata/dctk.h"
#include "dcmtk/dcmdata/dcpxitem.h"
#include<string>
#include<dcmimgle/dcmimage.h>
#include<iostream>
#include<stdio.h>
#include<opencv2/opencv.hpp>
using namespace std;
int main()
{
//DicomImage DCM_image("D:\\myproj\\vtk-proj\\digest_article\\brain_001.dcm");
//const int depth = DCM_image.getDepth();
//double min_val, max_val;
//DCM_image.getMinMaxValues(min_val, max_val);
//cout << "depth: " << depth << endl;
//cout << "height: " << DCM_image.getHeight() << endl;
//cout << "min_val:" << min_val << " " << "max_val:" << max_val << endl;
//uchar *pixelData = (uchar *)(DCM_image.getOutputData(16));
//cv::Mat image(int(DCM_image.getHeight()), int(DCM_image.getWidth()), CV_16U, pixelData);
//cv::imshow("image", image);
//cv::Mat test(int(DCM_image.getHeight()), int(DCM_image.getWidth()), CV_MAKETYPE(DCM_image.getDepth(), 1), (long*)DCM_image.getOutputData());
//cv::imshow("test", test);
//cv::Mat test1 = cv::Mat(int(DCM_image.getHeight()), int(DCM_image.getWidth()), CV_16UC1, (uchar *)(DCM_image.getOutputData(16)));
//cv::imshow("test1", test1);
//for (int i = 0; i < 100; i++)
//{
// cout << (int)*(pixelData+2*i) << endl;
//}
DcmFileFormat dfile;
dfile.loadFile("test_add_name.dcm");
//dfile.loadFile("D:\\myproj\\vtk-proj\\代码13_ReadDICOMImages\\TestVtk\\TestVtk\\digest_article\\brain_001.dcm");
DcmMetaInfo *Metalnfo = dfile.getMetaInfo();
DcmTag Tag;
Tag = Metalnfo->getTag();
Uint16 G_tag = Tag.getGTag();
cout << "G_tag: " << G_tag << endl;
DcmDataset *data = dfile.getDataset();
DcmElement* element = NULL;
data->findAndGetElement(DCM_PixelData, element);
double data_len = data->getLength();
double element_len = element->getLength();
cout << "data_len " << data_len << endl;
cout << "elemetn_len " << element_len << endl;
OFString patientName;
data->findAndGetOFString(DCM_PatientName, patientName);
cout << "patientName: " << patientName << endl;
OFString patientId;
data->findAndGetOFString(DCM_PatientID, patientId);
cout << "patientId: " << patientId << endl;
OFString patientAge;
data->findAndGetOFString(DCM_PatientAge, patientAge);
cout << "patientAge: " << patientAge << endl;
OFString PatientPosition;
data->findAndGetOFString(DCM_PatientPosition, PatientPosition);
cout << "PatientPosition: " << PatientPosition << endl;
OFString ImagePositionPatient;
data->findAndGetOFString(DCM_ImagePositionPatient, ImagePositionPatient);
cout << "ImagePositionPatient: " << ImagePositionPatient << endl;
OFString PixelSpacing;
data->findAndGetOFString(DCM_PixelSpacing, PixelSpacing);
cout << "PixelSpacing: " << PixelSpacing << endl;
//DcmPixelData *dpix = NULL;Pixel Spacing
//DcmPixelSequence *dseq = NULL;
//const DcmRepresentationParameter *rep = NULL;
Uint16* pixData16;
element->getUint16Array(pixData16);
cout << element->getLength() << endl;
cv::Mat imag = cv::Mat(256, 256, CV_8U, pixData16);// , element);
//
for (int i = 0; i < 100; i++)
{
cout << *(pixData16 + i)<<" ";
}
//for (int i = 0; i < 256; i++)
//{
// for (int j = 0; j < 256; j++)
// {
// //cout << *(pixData16+i*256+j) << endl;
// imag.at<int>(i, j) = 1; //*(pixData16 + i*256 + j);
// }
//}
//data->putAndInsertString(DCM_PatientName, "Doe John");
//dfile.saveFile("test_add_name.dcm", EXS_LittleEndianExplicit);
cv::imshow("image",imag);
cv::waitKey();
return 0;
}
需配置dcmtk库,zlib库以及opencv库,其中好像还得配置基本的一些库,我配好这三个库之后运行不成功,借助这个源码才成功。
http://www.voidcn.com/blog/zssureqh/article/p-1188605.html
http://download.csdn.net/detail/zssureqh/7734777
效果:
以及opencv显示,这个不知道为什么这个样子。