首页 > 学院 > 开发设计 > 正文

1 用dcmtk库解释dicom数据

2019-11-08 03:12:55
字体:
来源:转载
供稿:网友

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显示,这个不知道为什么这个样子。 这里写图片描述


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表