VTK-图像创建

该博客介绍了如何使用VTK库创建二维图像,并详细解释了设置图像维度、像素类型和内存分配的过程。接着,展示了如何遍历图像并修改像素值,通过翻转颜色来实现图像处理。

创建图像

    vtkSmartPointer<vtkImageData> img = vtkSmartPointer<vtkImageData>::New();
	vtkSmartPointer<vtkInformation> info = vtkSmartPointer<vtkInformation>::New();
	img->SetDimensions(225, 225, 336);
	img->SetScalarType(VTK_UNSIGNED_CHAR, info);  //VTK_UNSIGNED_CHAR表示图像的类型
	img->SetNumberOfScalarComponents(1, info);//每个像素需要表示的组份 =1是指标量图  一般是填1  如果是RGB图像就要填3 灰度图片和体数据都是填1
	img->AllocateScalars(info);//给图像分配内存

修改图像像素

    int dims[3];
    //获取图片的位数
    img->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)
                 {
                 //如果是要修改彩色图片RGB的值 记得要转换成(unsigned char *)类型
                 unsigned char *pixel = (unsigned char *)(img->GetScalarPointer(i, j, k));
                 //修改R
                 *pixel = 255 - *pixel;
                 //修改G
                 *(pixel + 1) = 255 - *(pixel + 1);
                 //修改B
                 *(pixel + 2) = 255 - *(pixel + 2);
                 }
             }
         }
     }

### 解决方案 当遇到 VTK 相关头文件缺失的问题时,例如 `QVTKOpenGLNativeWidget.h` 和 `vtkPNMReader.h` 等,通常是由于以下几个原因之一引起的:VTK 版本不匹配、模块未启用或安装路径配置错误。以下是具体的解决办法: #### 1. **确认 VTK 安装版本及其模块** 在 VTK 8.x 及更高版本中,部分功能被拆分为独立模块,因此需要确保启用了相应的模块。对于 `QVTKOpenGLNativeWidget.h`,它是从 VTK 8.0 开始引入的[^1],而 `vtkPNMReader.h` 则属于图像读取模块的一部分。 可以通过以下方式检查是否正确启用了所需模块: - 使用 CMake 构建时,应明确指定需要的模块。例如,为了支持 PNM 图像读取,需启用 `vtkIOImage` 模块。 ```cmake find_package(VTK REQUIRED COMPONENTS vtkGUISupportQt vtkRenderingOpenGL2 vtkIOImage ) include(${VTK_USE_FILE}) ``` #### 2. **验证头文件存在性** 如果已经正确安装了 VTK,但仍无法找到某些头文件,则可能是安装过程中遗漏了一些模块。建议重新编译并安装 VTK,同时确保所有必要模块都被激活。例如,在 CMake 配置阶段,可以查看是否有以下选项并勾选它们: - 对于 OpenGL 支持:`Module_vtkRenderingOpenGL2` - 对于 Qt 集成:`Module_vtkGUISupportQt` - 对于图像处理:`Module_vtkIOImage` 完成后再次运行构建流程,并将生成的库和头文件复制到适当位置。 #### 3. **调整环境变量** 有时候即使安装无误也可能因为动态链接库路径设置不当而导致找不到对应的 `.so` 文件或其他资源。此时可通过修改 LD_LIBRARY_PATH 来临时解决问题,或者永久更新 `/etc/ld.so.conf.d/vtk.conf` 文件以包含 VTK 库所在目录[^3]。 假设 VTK 被安装到了 `/opt/VTK/lib` 下面,则执行如下命令即可生效: ```bash echo "/opt/VTK/lib" | sudo tee -a /etc/ld.so.conf.d/vtk.conf sudo ldconfig ``` #### 4. **代码适配与迁移指南** 随着不同版本间 API 的变化,原有代码可能需要相应调整才能兼容新的实现细节。比如从较早版本迁移到 VTK 9.x 后,原先使用的类名可能会有所改变。具体而言: - 替代 `QVTKWidget` -> `QVTKOpenGLNativeWidget`; - 更新成员函数调用形式如 `GetInteractor()` => `interactor()` 等等[^2]。 提供一个简单例子展示这种差异下的转换逻辑: ```cpp #include <QApplication> #include <QVTKOpenGLNativeWidget.h> // 新版替代品 int main(int argc, char *argv[]) { QApplication app(argc, argv); QVTKOpenGLNativeWidget widget; // 创建控件实例 auto renderer = vtkSmartPointer<vtkRenderer>::New(); // 添加渲染器 widget.GetRenderWindow()->AddRenderer(renderer); // 设置窗口关联 widget.show(); return app.exec(); } ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值