vtk获取内存中图像数据(灰度图和彩色图)

CMakeList.txt

cmake_minimum_required(VERSION 2.8)

PROJECT(GrayImageImport)

find_package (Qt4 REQUIRED)
include_directories (
	${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}
	${QT_QTCORE_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR} ${QT_QTXML_INCLUDE_DIR}
	${QT_QTNETWORK_INCLUDE_DIR}
	)
	
find_package(VTK REQUIRED)
include(${VTK_USE_FILE})

set ( _RSCS
spm.qrc
)
QT4_ADD_RESOURCES(RSCS ${_RSCS})

set ( _MOCS)
QT4_WRAP_CPP(MOCS ${_MOCS})

add_executable(GrayImageImport MACOSX_BUNDLE GrayImageImport.cxx)

if(VTK_LIBRARIES)
  target_link_libraries(GrayImageImport ${VTK_LIBRARIES} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTXML_LIBRARY})
else()
  target_link_libraries(GrayImageImport vtkHybrid vtkWidgets ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTXML_LIBRARY})
endif() 

灰度图

#include <vtkVersion.h>
#include <vtkImageData.h>
#include <vtkSmartPointer.h>
#include <vtkImageImport.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkImageActor.h>
#include <vtkInteractorStyleImage.h>
#include <vtkXMLImageDataWriter.h>
#include <vtkImageMapper3D.h>
#include <vtkImageSlabReslice.h>
#include <vtkImageMapToColors.h>
#include <vtkImageMapper.h>
#include <vtkLookupTable.h>
#include <vtkActor2D.h>

int main(int, char *[])
{
    // Create a c-style image
    const int width = 4;
    const int height = 4;

    unsigned char cImage[width*height];
    unsigned char value = 200;
    for(unsigned int row = 0; row < height; ++row)
    {
        for(unsigned int col = 0; col < width; ++col)
        {
            cImage[row * width + col] = 180;
        }
    }

    // Convert the c-style image to a vtkImageData
    vtkSmartPointer<vtkImageImport> imageImport =
            vtkSmartPointer<vtkImageImport>::New();
    imageImport->SetDataSpacing(1, 1, 1);
    imageImport->SetDataOrigin(0, 0, 0);
    imageImport->SetWholeExtent(0, width-1, 0, height-1, 0, 0);
    imageImport->SetDataExtentToWholeExtent();
    imageImport->SetDataScalarTypeToUnsignedChar();
    imageImport->SetNumberOfScalarComponents(1);
    imageImport->SetImportVoidPointer(cImage);
    imageImport->Update();

    // Create an actor
    vtkSmartPointer<vtkImageActor> actor =
            vtkSmartPointer<vtkImageActor>::New();
#if VTK_MAJOR_VERSION <= 5
    actor->SetInput(imageImport->GetOutput());
#else
    actor->SetInputData(imageImport->GetOutput());
#endif

    // Setup renderer
    vtkSmartPointer<vtkRenderer> renderer =
            vtkSmartPointer<vtkRenderer>::New();
    renderer->AddActor(actor);
    renderer->ResetCamera();

    // Setup render window
    vtkSmartPointer<vtkRenderWindow> renderWindow =
            vtkSmartPointer<vtkRenderWindow>::New();
    renderWindow->AddRenderer(renderer);

    // Setup render window interactor
    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
            vtkSmartPointer<vtkRenderWindowInteractor>::New();
    vtkSmartPointer<vtkInteractorStyleImage> style =
            vtkSmartPointer<vtkInteractorStyleImage>::New();

    renderWindowInteractor->SetInteractorStyle(style);

    // Render and start interaction
    renderWindowInteractor->SetRenderWindow(renderWindow);
    renderWindowInteractor->Initialize();

    renderWindowInteractor->Start();

    return EXIT_SUCCESS;
}

彩色图

#include <vtkVersion.h>
#include <vtkImageData.h>
#include <vtkSmartPointer.h>
#include <vtkImageImport.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkImageActor.h>
#include <vtkInteractorStyleImage.h>
#include <vtkXMLImageDataWriter.h>
#include <vtkImageMapper3D.h>
#include <vtkImageSlabReslice.h>
#include <vtkImageMapToColors.h>
#include <vtkImageMapper.h>
#include <vtkLookupTable.h>
#include <vtkActor2D.h>

int main(int, char *[])
{
    // Create a c-style image
    const int width = 4;
    const int height = 4;

    unsigned char cImage[width*height*3];
    unsigned char value = 200;
    for(unsigned int row = 0; row < height; ++row)
    {
        for(unsigned int col = 0; col < width; ++col)
        {
            cImage[row * width*3 + col*3 + 0] = 180;
        }
    }

    for(unsigned int row = 0; row < height; ++row)
    {
        for(unsigned int col = 0; col < width; ++col)
        {
            cImage[row * width*3 + col*3 + 1] = 120;
        }
    }

    for(unsigned int row = 0; row < height; ++row)
    {
        for(unsigned int col = 0; col < width; ++col)
        {
            cImage[row * width*3 + col*3 + 2] = 60;
        }
    }

    // Convert the c-style image to a vtkImageData
    vtkSmartPointer<vtkImageImport> imageImport =
            vtkSmartPointer<vtkImageImport>::New();
    imageImport->SetDataSpacing(1, 1, 1);
    imageImport->SetDataOrigin(0, 0, 0);
    imageImport->SetWholeExtent(0, width-1, 0, height-1, 0, 0);
    imageImport->SetDataExtentToWholeExtent();
    imageImport->SetDataScalarTypeToUnsignedChar();
    imageImport->SetNumberOfScalarComponents(3);
    imageImport->SetImportVoidPointer(cImage);
    imageImport->Update();

    // Create an actor
    vtkSmartPointer<vtkImageActor> actor =
            vtkSmartPointer<vtkImageActor>::New();
#if VTK_MAJOR_VERSION <= 5
    actor->SetInput(imageImport->GetOutput());
#else
    actor->SetInputData(imageImport->GetOutput());
#endif

    // Setup renderer
    vtkSmartPointer<vtkRenderer> renderer =
            vtkSmartPointer<vtkRenderer>::New();
    renderer->AddActor(actor);
    renderer->ResetCamera();

    // Setup render window
    vtkSmartPointer<vtkRenderWindow> renderWindow =
            vtkSmartPointer<vtkRenderWindow>::New();
    renderWindow->AddRenderer(renderer);

    // Setup render window interactor
    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
            vtkSmartPointer<vtkRenderWindowInteractor>::New();
    vtkSmartPointer<vtkInteractorStyleImage> style =
            vtkSmartPointer<vtkInteractorStyleImage>::New();

    renderWindowInteractor->SetInteractorStyle(style);

    // Render and start interaction
    renderWindowInteractor->SetRenderWindow(renderWindow);
    renderWindowInteractor->Initialize();

    renderWindowInteractor->Start();

    return EXIT_SUCCESS;
}

发布了9 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/bukajiushang/article/details/92779175