/*
* hello_itk_vtk_qtwidgets.cpp
* 2017-11-15
* ITK读取,转VTK,QT显示
*/
#include "hello_itk_vtk_qtwidgets.h"
#include "ui_hello_itk_vtk_qtwidgets.h"
#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageToVTKImageFilter.h"
#include <vtkSmartPointer.h>
#include <vtkImageViewer2.h>
#include <vtkImageFlip.h>
//
// Hello_ITK_VTK_QtWidgets 类的构造函数
Hello_ITK_VTK_QtWidgets::Hello_ITK_VTK_QtWidgets(int b)
{
this->ui = new Ui_Hello_ITK_VTK_QtWidgets;
this->ui->setupUi(this);
//
const unsigned int Dimension = 2; //定义图像维数
//typedef unsigned char PixelType ; //定义像素类型:灰度图
typedef itk::RGBPixel< unsigned char > PixelType; //定义像素类型:RGB图
typedef itk::Image<PixelType , Dimension> ImageType ;
typedef itk::ImageFileReader< ImageType > ReaderType;
ReaderType::Pointer reader = ReaderType::New();
const char * filename1 = "/home/zlf/Documents/VTK/VTKCODE/ITKReadWrite_VTKShow/娄倬瑜1.jpg";
reader->SetFileName( filename1 );
reader->Update();
// 已经用ITK读取数据,存储在reader里面
// ITK TO VTK
typedef itk::ImageToVTKImageFilter< ImageType > itkTovtkFilterType;
itkTovtkFilterType::Pointer itkTovtkImageFilter = itkTovtkFilterType::New();
itkTovtkImageFilter->SetInput(reader->GetOutput());//设置图像数据从ITK转向VTK
itkTovtkImageFilter->Update();
// 上下反转
vtkSmartPointer <vtkImageFlip> imageflip =vtkSmartPointer<vtkImageFlip>::New();
imageflip->SetInputData(itkTovtkImageFilter->GetOutput());
imageflip->SetFilteredAxes(1);//Y轴
imageflip->Update();
// 显示
vtkImageViewer2 *viewer = vtkImageViewer2::New();
viewer->SetInputData(imageflip->GetOutput());
viewer->SetRenderWindow(ui->my_widget->GetRenderWindow());
viewer->Render();
};
//
// Hello_ITK_VTK_QtWidgets 类的析构函数
Hello_ITK_VTK_QtWidgets::~Hello_ITK_VTK_QtWidgets()
{
delete ui;
}
/
/*
* hello_itk_vtk_qtwidgets.h
* 2017-11-15
* ITK读取,转VTK,QT显示
*/
#ifndef HELLO_ITK_VTK_QTWIDGETS_H
#define HELLO_ITK_VTK_QTWIDGETS_H
#include <QMainWindow>
// Forward Qt class declarations
class Ui_Hello_ITK_VTK_QtWidgets;
class Hello_ITK_VTK_QtWidgets : public QMainWindow
{
Q_OBJECT
public:
Hello_ITK_VTK_QtWidgets(int b);
~Hello_ITK_VTK_QtWidgets();
private:
// Designer form
Ui_Hello_ITK_VTK_QtWidgets *ui;
};
#endif // HELLO_ITK_VTK_QTWIDGETS_H
/
/********************************************************************************
** 此文件是自动生成的 ui_hello_itk_vtk_qtwidgets.h
** Form generated from reading UI file 'hello_itk_vtk_qtwidgets.ui'
**
** Created by: Qt User Interface Compiler version 5.8.0
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_HELLO_ITK_VTK_QTWIDGETS_H
#define UI_HELLO_ITK_VTK_QTWIDGETS_H
#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QToolBar>
#include <QtWidgets/QWidget>
// 默认生成的是: #include <qvtkwidget.h>
// 此时会报错: fatal error: qvtkwidget.h: No such file or directory
// 修改成#include <QVTKWidget.h>
#include <QVTKWidget.h>
QT_BEGIN_NAMESPACE
class Ui_Hello_ITK_VTK_QtWidgets
{
public:
QWidget *centralWidget;
QHBoxLayout *horizontalLayout;
QGridLayout *gridLayout;
QVTKWidget *my_widget;
QMenuBar *menuBar;
QToolBar *mainToolBar;
QStatusBar *statusBar;
void setupUi(QMainWindow *Hello_ITK_VTK_QtWidgets)
{
if (Hello_ITK_VTK_QtWidgets->objectName().isEmpty())
Hello_ITK_VTK_QtWidgets->setObjectName(QStringLiteral("Hello_ITK_VTK_QtWidgets"));
Hello_ITK_VTK_QtWidgets->resize(463, 452);
centralWidget = new QWidget(Hello_ITK_VTK_QtWidgets);
centralWidget->setObjectName(QStringLiteral("centralWidget"));
horizontalLayout = new QHBoxLayout(centralWidget);
horizontalLayout->setSpacing(6);
horizontalLayout->setContentsMargins(11, 11, 11, 11);
horizontalLayout->setObjectName(QStringLiteral("horizontalLayout"));
gridLayout = new QGridLayout();
gridLayout->setSpacing(6);
gridLayout->setObjectName(QStringLiteral("gridLayout"));
my_widget = new QVTKWidget(centralWidget);
my_widget->setObjectName(QStringLiteral("my_widget"));
QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(my_widget->sizePolicy().hasHeightForWidth());
my_widget->setSizePolicy(sizePolicy);
gridLayout->addWidget(my_widget, 0, 0, 1, 1);
horizontalLayout->addLayout(gridLayout);
Hello_ITK_VTK_QtWidgets->setCentralWidget(centralWidget);
menuBar = new QMenuBar(Hello_ITK_VTK_QtWidgets);
menuBar->setObjectName(QStringLiteral("menuBar"));
menuBar->setGeometry(QRect(0, 0, 463, 25));
Hello_ITK_VTK_QtWidgets->setMenuBar(menuBar);
mainToolBar = new QToolBar(Hello_ITK_VTK_QtWidgets);
mainToolBar->setObjectName(QStringLiteral("mainToolBar"));
Hello_ITK_VTK_QtWidgets->addToolBar(Qt::TopToolBarArea, mainToolBar);
statusBar = new QStatusBar(Hello_ITK_VTK_QtWidgets);
statusBar->setObjectName(QStringLiteral("statusBar"));
Hello_ITK_VTK_QtWidgets->setStatusBar(statusBar);
retranslateUi(Hello_ITK_VTK_QtWidgets);
QMetaObject::connectSlotsByName(Hello_ITK_VTK_QtWidgets);
} // setupUi
void retranslateUi(QMainWindow *Hello_ITK_VTK_QtWidgets)
{
Hello_ITK_VTK_QtWidgets->setWindowTitle(QApplication::translate("Hello_ITK_VTK_QtWidgets", "Hello_ITK_VTK_QtWidgets", Q_NULLPTR));
} // retranslateUi
};
namespace Ui {
class Hello_ITK_VTK_QtWidgets: public Ui_Hello_ITK_VTK_QtWidgets {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_HELLO_ITK_VTK_QTWIDGETS_H
/
<?xml version="1.0" encoding="UTF-8"?>
<!-- ================================================================ -->
<!-- hello_itk_vtk_qtwidgets.ui -->
<!-- 第一行内容必须在第一行 否则报错:
Error in line 4, column 38 : XML declaration not at start of document.-->
<!-- ================================================================ -->
<ui version="4.0">
<class>Hello_ITK_VTK_QtWidgets</class>
<widget class="QMainWindow" name="Hello_ITK_VTK_QtWidgets">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>463</width>
<height>452</height>
</rect>
</property>
<property name="windowTitle">
<string>Hello_ITK_VTK_QtWidgets</string>
</property>
<widget class="QWidget" name="centralWidget">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<!-- ================================================================ -->
<!-- <widget class="QWidget" name="my_widget" native="true"> -->
<widget class="QVTKWidget" name="my_widget" native="true">
<!-- ================================================================ -->
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>463</width>
<height>25</height>
</rect>
</property>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
/
cmake_minimum_required(VERSION 2.8.8)
if(POLICY CMP0020)
cmake_policy(SET CMP0020 NEW)
endif()
if(POLICY CMP0025)
cmake_policy(SET CMP0025 NEW) # CMake 3.0
endif()
if(POLICY CMP0043)
cmake_policy(SET CMP0043 NEW) # CMake 3.0
endif()
if(POLICY CMP0053)
cmake_policy(SET CMP0053 NEW) # CMake 3.1
endif()
project(Hello_ITK_VTK_QtWidgets)
find_package(ITK REQUIRED)
include(${ITK_USE_FILE})
find_package(VTK REQUIRED)
include(${VTK_USE_FILE})
if("${VTK_QT_VERSION}" STREQUAL "")
message(FATAL_ERROR "VTK was not built with Qt")
endif()
# Set your files and resources here
set( Srcs hello_itk_vtk_qtwidgets.cpp main.cpp)
set( Hdrs hello_itk_vtk_qtwidgets.h )
set( MOC_Hdrs hello_itk_vtk_qtwidgets.h )
set( UIs hello_itk_vtk_qtwidgets.ui )
include_directories(
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
)
# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON)
find_package(Qt5 COMPONENTS Widgets REQUIRED QUIET)
qt5_wrap_ui(UI_Srcs ${UIs})
add_executable( Hello_ITK_VTK_QtWidgets ${Srcs} ${Hdrs} ${UI_Srcs} ${MOC_Hdrs} )
qt5_use_modules( Hello_ITK_VTK_QtWidgets Core Gui Widgets )
target_link_libraries( Hello_ITK_VTK_QtWidgets ${ITK_LIBRARIES} ${VTK_LIBRARIES} )
/
程序运行截图:
/