Как использовать Dcmtk в Qt?

Я работаю над проектом, где я должен прочитать изображение dicom.

Я не могу установить dcmtk. Я использую win7 64-битную и vs2010.

Пожалуйста, объясните процедуру включения dcmtk в мою программу.

4 ответа

Решение

Чтобы использовать Windows + DCMTK + QTВам необходимо выполнить следующие шаги:

  • Скомпилируйте DCMTK (Шаг 1.А)
  • Создайте пример приложения (шаг 2)
  • Создайте файл проекта QT, ссылаясь на скомпилированные / установленные библиотеки DCMTK (Шаг 3.B)
  • Скомпилируйте ваше приложение в вашей IDE (Шаг 4.B)

Если вы читаете это и не хотите использовать Qt, я отвечаю и на версию без Qt.

Windows + VisualStudio + DCMTK: шаги 1.A, 2, 3.A а также 4.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. Вы должны быть в состоянии заполнить source Каталог DCMTK.

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) Windows с интегрированной средой разработки Visual Studio 2012

Чтобы создать проект 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)

3.B) Windows QtCreator IDE с использованием VisuaStudio в качестве компилятора

Создать файл проекта для 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) Windows с Visual Studio 2012 IDE

Откройте файл проекта по адресу VisualStudio и нажмите на Build,

4.B) Windows с IDE QtCreator с использованием 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

Пожалуйста, обратите внимание, что если вы скомпилировали библиотеки в DEBUG режим, ваше приложение должно быть скомпилировано в DEBUG режим также.


Рекомендации

Попробуйте следовать инструкциям по установке Dcmtk. Если вы не знаете, как включить библиотеку в свой проект, изучите руководство по qmake.

Ребята из Common Toolkit решили некоторые из этих проблем. Вы также можете использовать Insight Toolkit

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

http://itk.org/

На самом деле есть немного документации по вики ITK, но ITK использует gdcm вместо dcmtk.

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

У нас есть проект, который представляет собой реализацию DCMTk в Qt - мы называем его QtDICOM, и он составляет основу многих наших продуктов ( http://fluxinc.ca/medical)/. Стоит посмотреть ( https://bitbucket.org/fluxinc/qt-dicom). Мы не очень хорошо документировали конфигурацию, но вы, возможно, сможете разобраться, если посмотрите.

Примечание. Это зависит от того, будет ли DCMTk создан и включен в различные пути.

Другие вопросы по тегам