如何在Qt中使用Dcmtk?

Mah*_*tab 4 qt qt4 dicom

我正在开展一个项目,我必须阅读一个dicom图像.

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

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

wel*_*ell 16

要使用Windows+ DCMTK+ QT,您需要执行以下步骤:

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

如果您正在阅读此内容并且不想使用Qt,我也会回答没有Qt的版本.

的Windows + VisualStudio的+ DCMTK:步骤1.A,2,3.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)以Admin模式(由于权限)重新执行VisualStudio 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
Run Code Online (Sandbox Code Playgroud)

示例: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;
}
Run Code Online (Sandbox Code Playgroud)

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

上一步中创建的文件需要放在项目中.您可以选择Windows VisualStudio (3.1)Windows Qt (3.2).如果您使用的是Linux,则可以跳过此步骤.

3.A)使用Visual Studio 2012 IDE的Windows

要创建Visual Studio项目,您可以使用Wizard和设置必要的设置,如:Linker,Libraries等等.但是,为了使这个答案更容易,我将使用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)
Run Code Online (Sandbox Code Playgroud)

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" \
Run Code Online (Sandbox Code Playgroud)

4.A)使用Visual Studio 2012 IDE的Windows

打开项目文件,VisualStudio然后单击Build.

4.B)使用VisuaStudio作为编译器的QtCreator IDE窗口

打开项目文件,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
Run Code Online (Sandbox Code Playgroud)

请注意,无论您是否在DEBUG模式下编译库,您的应用程序也应该以DEBUG模式编译.


参考