我正在尝试使用dcmtk从DICOM图像中提取实例编号。代码如下所示:
DcmFileFormat fileformat;
OFCondition status = fileformat.loadFile(src_path);
if (status.good())
{
OFString instanceNumber=0;
if (fileformat.getDataset()->findAndGetOFString(DCM_InstanceNumber, instanceNumber).good())
{
std::cout << "instance Number N: " << instanceNumber << std::endl;
sprintf(instanceNum, "%s\n", instanceNumber);
printf("%s\n", instanceNum);
}
else
std::cerr << "Error: cannot access instance Number!" << std::endl;
}
else
std::cerr << "Error: cannot read DICOM file (" << status.text() << ")" << std::endl;
现在我得到了实例号,但是我想将实例号复制到char或string中(以进行进一步编程)。但是由于该数是OFString,如何将其转换为所需的数据类型。有什么想法吗?
最佳答案
您可以使用dcmtk通过findAndGetXXX方法直接读入请求的数据类型。在您的特定情况下,实例编号的VR为IS,因此使用的方法为findAndGetSint32。请参阅:here。
应用于您的代码:
DcmFileFormat fileformat;
OFCondition status = fileformat.loadFile(src_path);
if (status.good())
{
SInt32 instanceNumber=0;
if (fileformat.getDataset()->findAndGetSint32(DCM_InstanceNumber, &instanceNumber).good())
{
std::cout << "instance Number N: " << instanceNumber << std::endl;
sprintf(instanceNum, "%d\n", instanceNumber);
printf("%d\n", instanceNum);
}
else
std::cerr << "Error: cannot access instance Number!" << std::endl;
}
else
std::cerr << "Error: cannot read DICOM file (" << status.text() << ")" << std::endl;
应该工作...