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

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

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

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


person Mahtab    schedule 19.02.2011    source источник


Ответы (4)


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


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

person well    schedule 03.09.2012
comment
Извините, но я не мог понять, как использовать код в разделе Компиляция вашего приложения + libDCMTK › Windows — Visual Studio. Я знаю только изменение свойств проекта. Я только что добавил дополнительный каталог include и дополнительные каталоги библиотек и получаю неразрешенные ошибки внешних символов при запуске testapp.cxx. Не уверен, что случилось. - person Ruchir; 09.11.2016
comment
@Ruchir Извините за недоразумение ... Вам нужно создать файл с именем CMakeLists.txt. После этого вы создадите файл .sln (файл проекта Visual Studio) с помощью CMAKE.exe или CMake-GUI. - person well; 27.05.2017
comment
Шаг 3.А. Кажется, вам нужно добавить больше библиотек в TARGET_LINK_LIBRARIES, по крайней мере oflog iphlpapi ws2_32 - person edtech; 22.12.2017
comment
@edtech что у тебя за SO? Виндовс 10? Windows 8? - person well; 27.12.2017
comment
@ хорошо Windows Server 2008, но, вероятно, это потому, что я использую Visual Studio 2015. Я получаю ошибки компоновщика без этих библиотек. - person edtech; 27.12.2017
comment
спасибо @edtech, я попытаюсь найти компьютер с Windows с VisualStudio 2015 и обновить шаги ... спасибо, что сообщили мне - person well; 28.12.2017

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

person hmuelner    schedule 20.02.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

person cpatrick    schedule 22.04.2011

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

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

person gamut    schedule 11.01.2016