我基本上是在尝试使用gdcm C++库从DICOM文件中读出所有或大部分属性值。我很难得到任何非字符串值。gdcm示例通常假设我事先知道组/元素编号,这样我就可以使用属性模板类,但我对它们不需要也不感兴趣,我只需要报告所有的属性名称和值。实际上,这些值应该放入XML中,所以我需要一个字符串表示。我目前有一些类似的东西:
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文件中的每个元素,这将使算法复杂度成为二次,这肯定是我想要避免的。
蒂娅·帕沃
发布于 2012-08-28 01:17:08
你看过gdcmdump吗?可以使用它将DICOM文件输出为文本或XML。您还可以查看源代码以了解它是如何做到这一点的。
发布于 2012-09-10 16:33:48
我最终将gdcm::StringFilter::ToStringPair()的一部分提取到一个单独的函数中。至少对于更简单的DCM文件来说似乎工作得很好。
发布于 2013-12-31 20:25:26
您也可以从阅读常见问题开始,特别是How do I convert an attribute value to a string ?
正如这里所解释的,您只需要使用gdcm::StringFilter
sf = gdcm.StringFilter()
sf.SetFile(r.GetFile())
print sf.ToStringPair(gdcm.Tag(0x0028,0x0010))https://stackoverflow.com/questions/12093022
复制相似问题