使用dcmtk获取dicom影像的像素值

#include "widget.h"
#include "ui_widget.h"
#include "dcmtk/config/osconfig.h"    /* make sure OS specific configuration is included first */
#include "dcmtk/dcmdata/dctk.h"
#include "dcmtk/dcmdata/dcpxitem.h"
#include "dcmtk/dcmimgle/dcmimage.h"
#include <QDebug>
uint getPixelValue(DicomImage *image,long x, long y, EP_Representation &r)
{
    if (image) {
        const DiPixel* pixel = image->getInterData();
        if (pixel && (x < (long)image->getWidth()) && (x >= 0)
                && (y < (long)image->getHeight()) && (y >= 0)) {
            r = pixel->getRepresentation();
            switch (r) {
            case EPR_Sint8:
            case EPR_Uint8:
                return *((char*)(pixel->getData()) + (y * image->getWidth() + x));
            case EPR_Sint16:
            case EPR_Uint16:
                return *((short*)(pixel->getData()) + (y * image->getWidth() + x));
            case EPR_Sint32:
            case EPR_Uint32:
                return *((int*)(pixel->getData()) + (y * image->getWidth() + x));
            }
        }
    }
 
    r = (EP_Representation)-1;
    return 0;
}
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    DicomImage* dcmImage = new DicomImage("D:/dcm/dcm_rc1/57DF1DB1");
    Sint16 *pixelData = (Sint16 *)(dcmImage->getOutputData(16));
    for(int i=0;i<100;i++)
    qDebug()<<(int)pixelData[i];
    double min,max;
    dcmImage->getMinMaxValues(min,max);
    qDebug()<<min<<max;
    const DiPixel* pixel=dcmImage->getInterData();
    qDebug()<<pixel->getRepresentation();
    int x=0;
    int y=0;
    uint data=*((short*)(pixel->getData()) + (y * dcmImage->getWidth() + x));
    qDebug()<<"data is:"<<(int)data;
    EP_Representation r;
    uint data2=getPixelValue(dcmImage,x,y,r);
    qDebug()<<"data2 is:--------------------------"<<(int)data2;
    for(int i=0;i<20;i++)
    {
        for(int j=0;j<20;j++)
        {
            //uint data3=getPixelValue(dcmImage,i,j,r);
            //qDebug()<<(qint16)data3;
            uint data=*((short*)(pixel->getData()) + (i * dcmImage->getWidth() + j));
            qDebug()<<"data is:"<<(qint16)data;
        }
    }
}
 
Widget::~Widget()
{
    delete ui;
}
 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值