首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以字符串形式检索gdcm DataElement值

以字符串形式检索gdcm DataElement值
EN

Stack Overflow用户
提问于 2012-08-23 21:43:13
回答 4查看 2.6K关注 0票数 1

我基本上是在尝试使用gdcm C++库从DICOM文件中读出所有或大部分属性值。我很难得到任何非字符串值。gdcm示例通常假设我事先知道组/元素编号,这样我就可以使用属性模板类,但我对它们不需要也不感兴趣,我只需要报告所有的属性名称和值。实际上,这些值应该放入XML中,所以我需要一个字符串表示。我目前有一些类似的东西:

代码语言:javascript
复制
for (gdcm::DataSet::ConstIterator it = ds.Begin(); it!=ds.End(); ++it) {
    const gdcm::DataElement& elem = *it;
    if (elem.GetVR() != gdcm::VR::SQ) {
        const gdcm::Tag& tag = elem.GetTag();
        std::cout << dict.GetDictEntry(tag).GetKeyword() << ": ";
        std::cout << elem.GetValue() << "\n";
    }
}

对于像UL这样的数值,输出似乎类似于" loaded :4",这可能意味着库已经加载了4个字节的数据(一个无符号的长整型)。这是没有任何帮助的,如何得到实际的值?我肯定忽略了一些显而易见的东西。

从示例中看,似乎有一个gdcm::StringFilter类能够做到这一点,但它似乎想要搜索DICOM文件中的每个元素,这将使算法复杂度成为二次,这肯定是我想要避免的。

蒂娅·帕沃

EN

回答 4

Stack Overflow用户

发布于 2012-08-28 01:17:08

你看过gdcmdump吗?可以使用它将DICOM文件输出为文本或XML。您还可以查看源代码以了解它是如何做到这一点的。

票数 1
EN

Stack Overflow用户

发布于 2012-09-10 16:33:48

我最终将gdcm::StringFilter::ToStringPair()的一部分提取到一个单独的函数中。至少对于更简单的DCM文件来说似乎工作得很好。

票数 1
EN

Stack Overflow用户

发布于 2013-12-31 20:25:26

您也可以从阅读常见问题开始,特别是How do I convert an attribute value to a string ?

正如这里所解释的,您只需要使用gdcm::StringFilter

代码语言:javascript
复制
sf = gdcm.StringFilter()
sf.SetFile(r.GetFile())
print sf.ToStringPair(gdcm.Tag(0x0028,0x0010))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12093022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档