opencv 在DCMTK中将OFString转换为字符串或字符

w1e3prcc  于 2023-03-03  发布在  其他
关注(0)|答案(4)|浏览(200)

我尝试使用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;

现在我得到了示例号,但是我想把示例号复制成一个字符或字符串(为了进一步编程),但是由于这个数字是一个OFString,我如何把它转换成所需的数据类型,有什么想法吗?

njthzxwz

njthzxwz1#

实际上,OFString实现了std::string的一个子集,所以如果你想得到一个“const char*”,你可以使用c_str(),就像其他人已经建议的那样。或者,你也可以用HAVE_STD_STRING来编译DCMTK,OFString将与std::string相同。
当然,所有这些在文档中也有描述。

gmol1639

gmol16392#

可以使用dcmtk通过findAndGetXXX方法直接读入请求的数据类型。在您的特定情况下,示例编号的VR为IS,因此要使用的方法为findAndGetSint32。请参阅:给你。
应用于您的代码:

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;

应该在工作...

06odsfpq

06odsfpq3#

您可以使用c_str()来获取const char*,然后根据需要在此基础上创建string

std::string s(instanceNumber.c_str());
brc7rcf0

brc7rcf04#

在某些情况下(例如Debian),操作系统提供的编译包带有DCMTK_ENABLE_STL disabled标志,修补这个包不是一个好主意,因为那样的话你就必须重新编译依赖它的每个包。
但是有时候你确实需要一个std::stringOFString却不行。一般来说,要把OFString转换成std::string,你可以使用下面的代码片段:

std::string str(ofstr.data(), ofstr.length());

其还复制任何嵌入的零(如果存在的话)。

相关问题