1 用dcmtk库解释dicom数据

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值