700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Study-VTK:Qt VTK图片 读取和写出

Study-VTK:Qt VTK图片 读取和写出

时间:2019-09-15 10:45:53

相关推荐

Study-VTK:Qt VTK图片 读取和写出

以前从未接触过vtk,用这玩意每次读取数据总要各种搜索,特此记录下vtk下自己常用的数据读入读出

主要参考:vtk帮助文档

案例源码

vtk 图像读取

ImageReader2Factory 读取任意格式图片

JPEGReader 读取jpg图片

MetaImageReader 读取mha,mhd,raw图片

PNGReader 读取png图片

ReadBMP 读取bmp图片

ReadDICOM读取dicom图片单张

ReadDICOMSeries读取连续dicom图片

ReadPNM读取pnm图片

ReadTIFF读取tif图片

使用方法基本雷同,读取不同格式替换为不同类即可,实在烦就直接用ImageReader2Factory

下边输入参数解释下

读取连续dicom图片argv[1] 是文件夹名字

其余读取图片argv[1]是文件名字

// 读取任意格式图片vtkSmartPointer<vtkImageReader2Factory> readerFactory =vtkSmartPointer<vtkImageReader2Factory>::New();vtkSmartPointer<vtkImageReader2> imageReader;imageReader.TakeReference(readerFactory->CreateImageReader2(argv[1] c_str()));imageReader->SetFileName(argv[1] .c_str());imageReader->Update();

//读取jpg图片vtkSmartPointer<vtkJPEGReader> jpegReader =vtkSmartPointer<vtkJPEGReader>::New();jpegReader->SetFileName ( argv[1] );

//读取mha,mhd,raw图片vtkSmartPointer<vtkMetaImageReader> reader =vtkSmartPointer<vtkMetaImageReader>::New();reader->SetFileName(inputFilename.c_str());reader->Update();

//读取png图片vtkSmartPointer<vtkPNGReader> reader =vtkSmartPointer<vtkPNGReader>::New();reader->SetFileName(argv[1]);

//读取bmp图片vtkSmartPointer<vtkBMPReader> reader =vtkSmartPointer<vtkBMPReader>::New();reader->SetFileName ( argv[1] );

//读取dicom图片单张vtkSmartPointer<vtkDICOMImageReader> reader = vtkSmartPointer<vtkDICOMImageReader>::New();reader->SetFileName(inputFilename.c_str());reader->Update();

//读取连续dicom图片vtkSmartPointer<vtkDICOMImageReader> reader =vtkSmartPointer<vtkDICOMImageReader>::New();reader->SetDirectoryName(folder.c_str());reader->Update();

//读取pnm图片vtkSmartPointer<vtkPNMReader> reader =vtkSmartPointer<vtkPNMReader>::New();reader->SetFileName ( argv[1] );

//读取tif图片vtkSmartPointer<vtkTIFFReader> reader =vtkSmartPointer<vtkTIFFReader>::New();reader->SetFileName ( argv[1] );

获取读取的图片统一用

imageReader->GetOutputPort()

vtk 图像写出

WriteImage()

提供了一个通用函数writeImage(),该函数根据文件扩展名选择要使用的图像编写器,然后将渲染窗口写入文件。支持以下格式:bmp、jpeg、pnm、png、postscript、tiff。

vtkJPEGWriter写出jpg图片

vtkMetaImageWriter写出 .mha/.mhd + .raw图片

vtkPNGWriter写出png图片

vtkBMPWriter写出bmp图片

vtkPNMWriter写出pnm图片

vtkTIFFWriter写出tif图片

这个是直接根据图片格式保存对应图片,单独某一个类型的用法类似

#include <vtkActor.h>#include <vtkNamedColors.h>#include <vtkPolyDataMapper.h>#include <vtkProperty.h>#include <vtkRenderWindow.h>#include <vtkRenderWindowInteractor.h>#include <vtkRenderer.h>#include <vtkSmartPointer.h>#include <vtkSphereSource.h>#include <vtkBMPWriter.h>#include <vtkImageWriter.h>#include <vtkJPEGWriter.h>#include <vtkPNGWriter.h>#include <vtkPNMWriter.h>#include <vtkPostScriptWriter.h>#include <vtkTIFFWriter.h>#include <vtkWindowToImageFilter.h>#include <array>#include <locale>#include <string>namespace {void WriteImage(std::string const &fileName, vtkRenderWindow *renWin,bool rgba = true);}int main(int, char *[]) {auto colors = vtkSmartPointer<vtkNamedColors>::New();std::array<unsigned char, 4> bkg{{26, 51, 102, 255}};colors->SetColor("BkgColor", bkg.data());auto ren = vtkSmartPointer<vtkRenderer>::New();auto renWin = vtkSmartPointer<vtkRenderWindow>::New();renWin->AddRenderer(ren);auto iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();iren->SetRenderWindow(renWin);auto source = vtkSmartPointer<vtkSphereSource>::New();source->SetCenter(0, 0, 0);source->SetRadius(5.0);auto mapper = vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputConnection(source->GetOutputPort());auto actor = vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);actor->GetProperty()->SetColor(colors->GetColor3d("Yellow").GetData());ren->AddActor(actor);ren->SetBackground(colors->GetColor3d("BkgColor").GetData());renWin->Render();std::vector<std::string> ext = {{""},{".png"}, {".jpg"}, {".ps"},{".tiff"}, {".bmp"}, {".pnm"}};std::vector<std::string> filenames;std::transform(ext.begin(), ext.end(), std::back_inserter(filenames),[](const std::string & e) {return "ImageWriter" + e;});filenames[0] = filenames[0] + '1';for (auto f : filenames) {WriteImage(f, renWin, false);}iren->Initialize();iren->Start();return EXIT_SUCCESS;}namespace {void WriteImage(std::string const &fileName, vtkRenderWindow *renWin, bool rgba) {if (!fileName.empty()) {std::string fn = fileName;std::string ext;auto found = fn.find_last_of(".");if (found == std::string::npos) {ext = ".png";fn += ext;} else {ext = fileName.substr(found, fileName.size());}std::locale loc;std::transform(ext.begin(), ext.end(), ext.begin(),[ = ](char const & c) {return std::tolower(c, loc);});auto writer = vtkSmartPointer<vtkImageWriter>::New();if (ext == ".bmp") {writer = vtkSmartPointer<vtkBMPWriter>::New();} else if (ext == ".jpg") {writer = vtkSmartPointer<vtkJPEGWriter>::New();} else if (ext == ".pnm") {writer = vtkSmartPointer<vtkPNMWriter>::New();} else if (ext == ".ps") {if (rgba) {rgba = false;}writer = vtkSmartPointer<vtkPostScriptWriter>::New();} else if (ext == ".tiff") {writer = vtkSmartPointer<vtkTIFFWriter>::New();} else {writer = vtkSmartPointer<vtkPNGWriter>::New();}auto window_to_image_filter =vtkSmartPointer<vtkWindowToImageFilter>::New();window_to_image_filter->SetInput(renWin);window_to_image_filter->SetScale(1); // image qualityif (rgba) {window_to_image_filter->SetInputBufferTypeToRGBA();} else {window_to_image_filter->SetInputBufferTypeToRGB();}// Read from the front buffer.window_to_image_filter->ReadFrontBufferOff();window_to_image_filter->Update();writer->SetFileName(fn.c_str());writer->SetInputConnection(window_to_image_filter->GetOutputPort());writer->Write();} else {std::cerr << "No filename provided." << std::endl;}return;}}

vtk学习教程

Study-VTK

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。