代码实现
CMakeLists.txt文件代码如下
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(changePixel)
FIND_PACKAGE(VTK REQUIRED)
INCLUDE(${VTK_USE_FILE})
ADD_EXECUTABLE(changePixel changePixel.cpp)
TARGET_LINK_LIBRARIES(changePixel ${VTK_LIBRARIES})
changePixel.cpp代码如下
#include <vtkAutoInit.h>
#include <vtkSmartPointer.h>
#include <vtkJPEGReader.h>
#include <vtkImageViewer2.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkPNGWriter.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleImage.h>
#include <vtkImageActor.h>
#include <vtkImageData.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
int main()
{
vtkSmartPointer<vtkJPEGReader> reader =
vtkSmartPointer<vtkJPEGReader>::New();
//读取JPG文件
reader->SetFileName("/home/jack/projects/VTK/7demo/test.jpeg");
reader->Update();
int dims[3];
//获取图片的位数
reader->GetOutput()->GetDimensions(dims);
for (int k = 0; k < dims[2]; k++)
{
for (int j = 0; j < dims[1]; j++)
{
for (int i = 0; i < dims[0]; i++)
{
//i < 400 && i > 0 && j > 0 && j < 400表示要改修的范围
if (i < 400 && i > 0 && j > 0 && j < 400)
{
//记得要转换成(unsigned char *)类型
unsigned char *pixel = (unsigned char *)(reader->GetOutput()->GetScalarPointer(i, j, k));
//修改R
*pixel = 255 - *pixel;
//修改G
*(pixel + 1) = 255 - *(pixel + 1);
//修改B
*(pixel + 2) = 255 - *(pixel + 2);
}
}
}
}
vtkSmartPointer<vtkImageViewer2> ImageViewer =
vtkSmartPointer<vtkImageViewer2>::New();
ImageViewer->SetInputConnection(reader->GetOutputPort());
//显示该幅图像
ImageViewer->Render();
//加入交互机制
//实例化一个交互器对象interactor
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInter =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
ImageViewer->SetupInteractor(renderWindowInter);
renderWindowInter->Initialize();
renderWindowInter->Start();
}