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

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

4 голосов
/ 19 февраля 2011

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

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

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

Ответы [ 4 ]

15 голосов
/ 04 сентября 2012

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

  • Скомпилируйте DCMTK (Шаг 1.A)
  • Создайте пример приложения (шаг 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 IDE

Чтобы создать проект 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) IDE Windows QtCreator с использованием 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

Откройте файл проекта в 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.


Ссылки

2 голосов
/ 20 февраля 2011

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

1 голос
/ 11 января 2016

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

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

1 голос
/ 22 апреля 2011

Ребята из 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#How_to_read_a_volume_from_a_DICOM_series

...