4

我正在做一个必须阅读 dicom 图像的项目。

我无法安装 dcmtk。我正在使用win7 64位和vs2010。

请解释在我的程序中包含 dcmtk 的过程。

4

4 回答 4

18

要使用Windows++ ,您需要执行以下步骤DCMTKQT

  • 编译 DCMTK(步骤 1.A)
  • 创建您的示例应用程序(步骤 2)
  • 创建引用已编译/安装的 DCMTK 库的 QT 项目文件(步骤 3.B)
  • 在 IDE 中编译应用程序(步骤 4.B)

如果您正在阅读本文并且不想使用 Qt,那么我也在回答没有 Qt 的版本。

Windows+VisualStudio + DCMTK:步骤1.A、、23.A4.A

Linux+GCC+DCMTK: 步骤1.B, 2, N/A,4.C


1) 编译 DCMTK

首先,要在您的应用程序中使用 DCMTK 库,您应该编译 DCMTK 源代码以生成库:

在我写这篇文章时,最后一个可用版本是 3.6.0。所以,我们应该下载它:

ftp://dicom.offis.de/pub/dicom/offis/software/dcmtk/dcmtk360/dcmtk-3.6.0.zip

下载完成后,需要解压文件夹。DCMTK 源没有项目文件,但这不是问题,有一个 CMakelist 文件负责在您想要的操作系统/编译器中生成项目文件。如果您不熟悉 CMake 工具,可以在此处阅读更多内容(https://cmake.org/

1.A) 在 Windows/Visual Studio 2012 上编译

1.A.1)您需要安装编译器,在我的情况下,它是 Visual Studio 2012

1.A.2)运行CMake tool生成一个项目文件到Visual Studio 2012。你需要能够填写sourceDCMTK目录。

1.A.3)现在,执行VisualStudio 2012,打开sln上一步(2)创建的文件并编译目标ALL_BUILD

1.A.4)在模式下重新执行VisualStudio Admin(因为权限C:\Program Files)编译目标INSTALL(它会将DCMTK复制并安装到默认路径:C:/Program Files/DCMTK/,我们可以引用它这样的PATH_WHERE_DCMTK_WAS_INSTALLED

(1.B) 在 GNU/Linux GCC 上编译

我在 Ubuntu/CentOS 上测试过。首先,您应该转到DCMTK Source并运行以下三个命令:

$ ./configure --prefix=path_to_dcmtk
$ make all
$ sudo make install

示例:path_to_dcmtk = /home/user/dcmtk


2) 创建您的示例应用程序

创建一个名为your_sample/testapp.cxx以下内​​容的文件。这是在 DCMTK 论坛中找到的一个演示,用于打开 DICOM 文件并打印患者姓名。

#include "dcmtk/dcmdata/dctk.h"
#include <iostream>
using namespace std;

int main()
{
   DcmFileFormat fileformat;
   OFCondition status = fileformat.loadFile("test.dcm");
   if (status.good())
   {
      OFString patientsName;
      if (fileformat.getDataset()->findAndGetOFString(DCM_PatientName, patientsName).good())
      {
         cout << "Patient's Name: " << patientsName << endl;
      }else{
         cerr << "Error: cannot access Patient's Name!" << endl;
      }

   }else{
      cerr << "Error: cannot read DICOM file (" << status.text() << ")" << endl;
   }
   return 0;
}

3) 使用 VisuaStudio 作为编译器创建应用程序项目

上一步创建的文件需要放在一个工程中。您可以在选项Windows VisualStudio (3.1)和之间进行选择 Windows Qt (3.2)。如果您使用的是 Linux,则可以跳过此步骤。

3.A) 带有 Visual Studio 2012 IDE 的 Windows

要创建 Visual Studio 项目,您可以使用Wizard并设置必要的设置,例如:LinkerLibraries等。但是,为了更容易回答这个问题,我将使用CMakeList.txt为 Visual Studio 2012 创建一个项目。所以,请创建一个your_sample/CmakeList.txt使用以下内容调用的文件:

PROJECT(testapp)

SET(DCMTK_DIR ABSOLUTE_PATH_WHERE_DCMTK_WAS_INSTALLED)
#an example: SET(DCMTK_DIR "C:\\Users\\test\\test_dcmtk\\DCMTK")

# settings for Microsoft Visual C++ 6
SET(CMAKE_C_FLAGS "/nologo /W3 /GX /Gy /YX")
SET(CMAKE_C_FLAGS_DEBUG "/MTd /Z7 /Od")
SET(CMAKE_C_FLAGS_RELEASE "/MT /O2")
SET(CMAKE_CXX_FLAGS "/nologo /W3 /GX /Gy /YX")
SET(CMAKE_CXX_FLAGS_DEBUG "/MTd /Z7 /Od")
SET(CMAKE_CXX_FLAGS_RELEASE "/MT /O2")

ADD_DEFINITIONS(-D_REENTRANT)

INCLUDE_DIRECTORIES(${DCMTK_DIR}/include)
LINK_DIRECTORIES(${DCMTK_DIR}/lib)

ADD_EXECUTABLE(testapp testapp)
TARGET_LINK_LIBRARIES(testapp netapi32 wsock32 ofstd dcmdata)

3.B) 使用 VisuaStudio 作为编译器的 Windows QtCreator IDE

为 QtCreator IDE 创建项目文件。您需要创建一个名为的文件your_sample/my_project.pro,其内容如下:

SOURCES += testapp.cxx
CONFIG += debug console
DEFINES += _REENTRANT

QMAKE_CFLAGS_RELEASE -= -MD
QMAKE_CFLAGS_RELEASE = -MT
QMAKE_CFLAGS_DEBUG -= -MDd
QMAKE_CFLAGS_DEBUG = -MTd
QMAKE_CXXFLAGS_RELEASE -= -MD
QMAKE_CXXFLAGS_RELEASE += -MT
QMAKE_CXXFLAGS_DEBUG -= -MDd
QMAKE_CXXFLAGS_DEBUG += -MTd

INCLUDEPATH += (RELATIVE_PATH_WHERE_DCMTK_WAS_INSTALLED)/include
#an example: INCLUDEPATH += ../../../test_dcmtk/DCMTK/include

LIBS += -L"(RELATIVE_PATH_WHERE_YOU_INSTALLED_DCMTK)/lib" \
-ladvapi32 \
-ldcmdata \
-loflog \
-lofstd \
-lws2_32 \
-lnetapi32 \
-lwsock32
#an example: LIBS += -L"../../../test_dcmtk/DCMTK/lib" \

4.A) 带有 Visual Studio 2012 IDE 的 Windows

打开项目文件VisualStudio并单击Build.

4.B) 带有 QtCreator IDE 的 Windows 使用 VisuaStudio 作为编译器

打开项目文件QT并单击Build.

4.C) GNU/Linux - 带有 GCC 的命令行

g++ testapp.cxx -DHAVE_CONFIG_H -I/path_to_dcmtk/include -L/path_to_dcmtk/lib -pthread -ldcmdata -lz -loflog -lofstd -o main

请注意,无论您是否已在DEBUGmode 下编译库,您的应用程序也应在DEBUGmode 下编译。


参考

于 2012-09-03T20:27:17.013 回答
2

尝试按照 Dcmtk安装说明进行操作。如果您不知道如何在项目中包含该库,请研究qmake 手册

于 2011-02-20T07:31:35.540 回答
1

Common Toolkit 的人已经解决了其中的一些问题。您还可以使用 Insight Toolkit

http://www.commontk.org/index.php/Main_Page

http://itk.org

事实上,ITK wiki 上有一些文档,但 ITK 使用 gdcm 而不是 dcmtk。

http://www.itk.org/Wiki/ITK_FAQ#How_to_read_a_volume_from_a_DICOM_series

于 2011-04-22T03:51:21.817 回答
1

我们有一个项目是 Qt 中 DCMTk 的实现——我们称之为 QtDICOM,它构成了我们许多产品的基础 ( http://fluxinc.ca/medical)/。值得一看(https://bitbucket.org/fluxinc/qt-dicom)。我们还没有特别清楚地记录配置,但是如果您看一下,您可能会弄清楚。

注意:它确实取决于正在构建的 DCMTk 并包含在各种路径中。

于 2016-01-11T01:57:21.657 回答