VTK、ITK安装及ITK读取图片、VTK显示示例(CMake)

2023-05-16

VTK、ITK安装及ITK读取图片、VTK显示示例

文章目录

  • 前言
  • 一、配置
  • 二、混合编程实例
    • 1.创建工程
    • 2.修改CMakeLists.txt
    • 3.画界面mainwidow.ui
    • 3.编程(~ 1 ~)
    • 4.运行
  • 反思
  • 总结


前言

本文将简要回顾VTK、ITK安装过程中遇到的坑,便于排雷。详细说明如何使用ITK和VTK在QT中混合编程。 你可能会有疑问为啥要使用QT呢,使用VS不香吗?其实在我看来QT的界面做出来的比较漂亮,而且就IDE的界面和舒适感来说,QT都要比VS看起来炫酷,鉴于装x和将来的实用,选择QT来编程。VTK的使用也会让自己的界面看起来非常炫酷(带3D旋转的那种),重点是项目需求。至于使用ITK,主要是它里面有很多算法,特别是对于我这种菜菜来说,可以偷懒用他们现成的程序,但是不得不说,别人的东西使用起来还是需要学习下怎么使用的,我将会在ITK读取图片的过程中说明自己的辛酸过程

一、配置

1.vs2017安装:可以参照这个地址安装,安装这个的目的主要是后面安装VTK和ITK时候Build要用,而且有别的需要编译的东西也会用到它。不过我没有按照这个安装,因为我的电脑安装有这个,不过以我的经验来看,安装这个很简单,除了耗费点时间。

2.CMake安装: 参考安装链接

我安装的版本是3.20.1

**注意:**安装完成要记得添加环境变量,一定记得,一定记得,一定记得,在使用QT的CMake模式的时候要用到。

3.QT安装: 参考安装[链接](https://blog.csdn.net/weixin_41656968/article/details/80369576)

我安装的版本是QT5.9.9
在这里遇到这一步


记得勾选MSVC 2017 64-bit,其他的可以不选,因为我们在上一步已经配置安装了VS 2017。
安装完成后,打开QT选择工具->选项就可以看到CMake了
在这里插入图片描述

4.VTK安装 参考链接
我安装的版本是VTK8.2.0
在CMake的过程中注意下面参数的设置。
在这里插入图片描述

另外需要注意的是在使用VS2017进行BUILD文件ALL_BUILD和INSTALL的时候 ,记得检查VS2017的这个地方选择的是Debug还是Release。
在这里插入图片描述在这里插入图片描述
要记清楚自己所选的模式,不然在之后QT中的编译会出现很多问题。

最后插一句,如果根据网上的教程发现在相应的文件夹下找不到对应的文件,不要慌,不要怀疑自己,记得在VTK安装的大目录下搜素就好了,可能它出现在别的文件夹下。

4.ITK安装 参考安装[教程](https://blog.csdn.net/webzhuce/article/details/70494822) 我安装的版本是ITK4.13.3,需要注意的地方和VTK一样,记得选Module_ITKVtkGlue,不选这个不能itk和vtk一块使用,甚至读入的图片想显示都费劲

在这里插入图片描述

使用VS2017的时候注意Debug和Release,最后测试的时候,用CMake生成.sln文件,能在VS2017中运行即可。

二、混合编程实例

1.创建工程

打开QT新建工程,按下面的参数进行
在这里插入图片描述
接下来这一步非常关键,记得勾选CMake,别用QMake。

ITK的头文件啊库啊什么的一大堆都需要用CMake进行管理。用QMake的话,我暂时不会搞,include ITK的头文件的时候就会报错,所以我用了CMake的模式。

接下来的过程就是一顿默认下一步,直到这里记得选MSVC 2017。在这里插入图片描述
接下来的过程就是一顿默认下一步,直至生成文件系统如下。
在这里插入图片描述

2.修改CMakeLists.txt

千万!千万!!千万!!!别抖机灵改这个文件名,改改里面的内容就行了
里面的内容如下:

cmake_minimum_required(VERSION 3.5)

project(itktest LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt5 COMPONENTS Widgets REQUIRED)
find_package(ITK REQUIRED)
find_package(VTK REQUIRED)

if(ITK_FOUND)
    include(${ITK_USE_FILE})
ELSE(ITK_FOUND)
    MESSAGE(FATAL_ERROR
    "ITK not found. Please set ITK_DIR.")
endif()

if(ITK_FOUND)
    include(${VTK_USE_FILE})
ELSE(ITK_FOUND)
    MESSAGE(FATAL_ERROR
    "VTK not found. Please set VTK_DIR.")
endif()

if(ANDROID)
  add_library(itktest SHARED
    main.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui
  )
else()
  add_executable(itktest
    main.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui
  )
endif()

target_link_libraries(itktest PRIVATE Qt5::Widgets)
target_link_libraries(itktest PRIVATE ${ITK_LIBRARIES} ${VTK_LIBRARIES})

这里面的大致意思是要包含ITK和VTK的库,还要和QT结合起来,具体的内容也非常好懂,可以参考这篇博客,实在看不懂也没关系,以后都这么写就好了。
干到这里,就可以先构建一下看有啥问题没了,记得选 Debug模式去运行。(这是写给自己的,我的用Release不能关联ITK库)

3.画界面mainwidow.ui

除了默认的一些类,还用到了两个QPushbutten,一个QTextBrowser,和一个QWidget,还需要将其提升为QVTKWidget,用来显示图片,右键点击该部件,出现如下图所示:
在这里插入图片描述
画好后的界面如下图所示
在这里插入图片描述创建好之后的类如下
在这里插入图片描述
整完界面以后,开心的运行一下,看一下自己画的炫(chou)酷(lou)的界面。

3.编程(~ 1 ~)

编写mainwindow.h,包含类的定义和一些头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "QVTKWidget.h"
#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageToVTKImageFilter.h"
#include "itkJPEGImageIOFactory.h"

#include "itkBMPImageIOFactory.h"
#include "itkImageFileReader.h"
#include "vtkImageViewer.h"
#include "itkCenteredRigid2DTransform.h"
#include "itkResampleImageFilter.h"
#include <vtkOutputWindow.h>
#include "vtkImageActor.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include  <vtkSmartPointer.h>

typedef itk::RGBPixel< unsigned char >   PixelType;
typedef itk::Image< PixelType, 2 >       ImageType;
typedef itk::ImageFileReader<ImageType> ReaderType;
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void display(ImageType::Pointer image);
    ImageType::Pointer imread(std::string Filename);
    ImageType::Pointer rotage(ImageType::Pointer image,double angle);

private slots:
    void on_ori_clicked();
    void on_pushButton_2_clicked();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    vtkOutputWindow::SetGlobalWarningDisplay(0);   //不想看到那个丑陋的VTKOUTPUT窗口
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

mainwindow.cpp 对mainwindow.h中定义的方法进行实现。

#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::display(ImageType::Pointer image)
{
    //显示图片
    typedef itk::ImageToVTKImageFilter< ImageType > itkTovtkFilterType;
    itkTovtkFilterType::Pointer itkTovtkImageFilter = itkTovtkFilterType::New();
    itkTovtkImageFilter->Update();
    itkTovtkImageFilter->SetInput(image);//设置图像数据从ITK转向VTK
    itkTovtkImageFilter->Update();


     // vtkImageActor在3D场景下渲染图像
     vtkSmartPointer<vtkImageActor> actor = vtkImageActor::New();
     actor->SetInputData(itkTovtkImageFilter->GetOutput());


     //VTK渲染的一般步骤
     vtkSmartPointer<vtkRenderer> render = vtkRenderer::New();
     render->AddActor(actor);

     vtkSmartPointer<vtkRenderWindow> window = vtkRenderWindow::New();
     window->ClearInRenderStatus();
     window->SetSize(800, 600);
     window->AddRenderer(render);

     this->ui->widget->SetRenderWindow(window);
     this->ui->widget->GetRenderWindow()->Render();
}

ImageType::Pointer MainWindow::imread(std::string Filename)
{
    //读入图像
    itk::JPEGImageIOFactory::RegisterOneFactory();
    ReaderType::Pointer reader = ReaderType::New();

    reader->SetFileName(Filename);
    reader->Update();

    return reader->GetOutput();

}

ImageType::Pointer MainWindow::rotage(ImageType::Pointer image,double angle)
{
        //实现对图像的旋转
        using TransformType = itk::CenteredRigid2DTransform<double>;
        using RescaleImageType = itk::ResampleImageFilter<ImageType, ImageType>;

        TransformType::Pointer transform = TransformType::New();
        RescaleImageType::Pointer rescale = RescaleImageType::New();

        const ImageType::SpacingType& spacing = image->GetSpacing();
        const ImageType::PointType& origin = image->GetOrigin();
        const ImageType::SizeType size = image->GetLargestPossibleRegion().GetSize();


        const double imageCenterx = origin[0] + spacing[0] * size[0] / 2.0;
        const double imageCenterY = origin[1] + spacing[1] * size[1] / 2.0;

        transform->SetAngle(angle);

        TransformType::OutputPointType Center;
        Center[0] = imageCenterx;
        Center[1] = imageCenterY;
        transform->SetCenter(Center);

        rescale->SetDefaultPixelValue(100);
        rescale->SetTransform(transform);
        rescale->SetSize(image->GetLargestPossibleRegion().GetSize());
        rescale->SetOutputOrigin(image->GetOrigin());
        rescale->SetOutputSpacing(image->GetSpacing());
        rescale->SetOutputDirection(image->GetDirection());
        rescale->SetInput(image);
        rescale->Update();
        ImageType::Pointer res = rescale->GetOutput();

        return res;

}

void MainWindow::on_ori_clicked()
{
    //如果不对图像进行反转180度,图像将是倒着的,这与itk和vtk的坐标定义有关
    ImageType::Pointer image = imread("F:/itktest/s.jpeg");   //尽量不要有中文路径,我有的时候好像啥也读不进去

    this->ui->textBrowser->clear();
    this->ui->textBrowser->append("This is original image");

    display(image);
}

void MainWindow::on_pushButton_2_clicked()
{
    ImageType::Pointer image = imread("F:/itktest/s.jpeg");
    ImageType::Pointer result = rotage(image,3.14);
    this->ui->textBrowser->clear();
    this->ui->textBrowser->append("This is rotaged image");

    display(result);
}

4.运行

累半天,终于搞定了,接着就是运行下,欣赏下自己的作品,自信按下运行键,结果报了一万个错,甚至不想百度的那种错,又不想从头来了,想了想,忽然想到自己用的模式是Release,深恶痛绝,赶紧换成Debug模式,满怀期待的点了运行键,他就完美的出来了。
在这里插入图片描述在这里插入图片描述

反思

这个程序只能显示,不能交互进行,一交互就显示灰色图片-乱码,运气不好还会崩。总之革命尚未成功,同志仍需努力。

总结

安装不好别怀疑自己,遵守职业操守,怀疑软件;遇事不决调参数。加油啥也不是的自己

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VTK、ITK安装及ITK读取图片、VTK显示示例(CMake) 的相关文章

  • Maya里面的模型动画导入Unity使用

    听别人将东西要是不感兴趣还真是听不进去 xff0c 听老师讲课更是如此 xff0c 有时候还起到很好地催眠作用 最近一直在想模型原创的问题 xff0c 如何自己制动画导入Unity进行使用 xff0c 上百度上开始寻找方法 xff0c 有时
  • 对象模型,动态模型,功能模型

    第七周作业 用面向对象方法分析研究书中习题2第3题中描述的机票预订系统 xff0c 试建立它的对象模型 动态模型和功能模型 来源 xff1a 博客园 2016 04 18 对象模型如下 xff1a 动态模型如下 xff1a 功能模型如下 x
  • 要你命三千又三千的成长之旅

    今天 xff0c 是我第一回玩博客 xff0c 也是作为一个小白听从他人的建议 xff0c 用博客来记录自己的电脑学习之旅 xff0c 自己的成长之旅 xff01 我不喜欢博客 xff0c 但是我依然要开始努力用博客记录自己的点点滴滴 xf
  • UML中关联,依赖,聚集,组成的联系和区别

    在UML中 xff0c 关联 xff0c 依赖 xff0c 聚集 xff0c 组成的联系十分紧密 xff0c 不容易区分 xff0c 本文试图用通俗的语言来讲解这四种关系的区别 关联 xff0c 即是发生关系 xff0c 一个类A关联类B
  • XML基础

    首先用记事本建立一个XML文件 xff0c 后缀自己改txt gt xml lt xml version 61 34 1 0 34 encoding 61 34 utf 8 34 gt lt root gt lt Level gt lt n
  • 科研必备的14个学术搜索引擎

    学术搜索可以帮助学术科研人员快速寻找学术资料 xff0c 如专家评审文献 论文 书籍 预印本 摘要以及技术报告等 本文为你介绍14个学术搜索引擎 1 Google Scholar Google 推出的免费学术搜索工具 xff0c 可以帮助用
  • Windows 10中python2和python3共存

    在win10中暗转python2和python3在命令行同时使用时可能无法实现 xff0c 因为安装python3时默认只有python exe和python2里的一样 xff0c 所以这时候需要再弄一个python3 exe来区分 xff
  • 解决error: unknown type name ‘__u8’问题,认识__u8,__u16,__u32,__u64的大小及作用

    1 解决Linux error unknown type name u8 问题 xff1a 内核提供的数据类型都在头文件 lt asm types h gt 声明 xff0c 可以在程序中加上 include lt asm types h
  • 基于ZigBee的智能家居系统

    本项目基于C 编写智能家居系统PC客户端 同时编写安卓客户端 代码下载链接https download csdn net download hzqgangtiexia 10435931 1 硬件选型及数据采集 节点板子以CC2530芯片为核
  • 一文理解ZigBee通信全过程(基于ZStack-CC2530-2.5.1a协议栈)

    自己在word中整理的笔记 基本上详细的分析了Zigbee的原理 比较透彻 分享给大家交流参考 目录 0概述 2 1协议栈整体运行流程 3 1 1 操作系统初始化流程 5 1 2操作系统启动 9 2相关数据结构与函数调用 13 3 ZigB
  • 深度学习(五)学习率的调节

    nbsp nbsp nbsp 学习率对于深度学习是一个重要的超参数 它控制着基于损失梯度调整神经网络权值的速度 大多数优化算法 SGD RMSprop Adam 对其都有所涉及 学习率越小 损失梯度下降的速度越慢 收敛的时间更长 如公式所示
  • 深度学习(九)正则化惩罚项

    在机器学习特别是深度学习中 xff0c 我们通过大量数据集希望训练得到精确 泛化能力强的模型 xff0c 对于生活中的对象越简洁 抽象就越容易描述和分别 xff0c 相反 xff0c 对象越具体 复杂 明显就越不容易描述区分 xff0c 描
  • 深度学习(十五)卷积神经网络CNN(3)---局部连接

    作用 xff1a 降低参数数目 xff0c 减少网络运算复杂度 原理 xff1a 一般认为人对外界的认知是从局部到全局的 xff0c 而图像的空间联系也是局部的像素联系较为紧密 xff0c 而距离较远的像素相关性则较弱 因而 xff0c 每
  • 深度学习(十五)卷积神经网络CNN(5)---池化层/采样层

    池化层的输入一般来源于上一个卷积层 xff0c 主要作用是提供了很强的鲁棒性 xff08 例如max pooling是取一小块区域中的最大值 xff0c 此时若此区域中的其他值略有变化 xff0c 或者图像稍有平移 xff0c poolin
  • 深度学习(十九)对抗学习(1)

    sorry 笔记正在上传
  • 深度学习(十九)对抗学习(2)

    sorry 笔记正在上传
  • C#界面开发终极UI工具包分享——Krypton

    目录 摘要 1 实例展示 2 下载 3 使用 3 1 直接用源码中例程 3 2 在已有的工程中添加Krypton库 摘要 能看到这篇分享的小伙伴 我相信都对C 的界面开发有了一定的了解 每当自己辛辛苦苦地做完了一个上位机小工具 但总是觉得U
  • 深度学习(十九)对抗学习(3)

    sorry 笔记正在上传
  • 函数指针和回调函数以及返回指向函数的指针

    nbsp nbsp nbsp nbsp 函数指针指向的是函数而非对象 和其他类型一样 函数指针指向某种特定类型 因为函数的类型由它的返回类型和形参类型共同决定 与函数名无关 所以想要声明一个函数指针 只需要用指针替换函数名即可 例如 比较字
  • Winform的控件学习整理篇

    窗体 窗体是整个WinForm的核心 xff0c 在Windows系统上的每一个界面都可以看作是一个窗体 xff0c 只不过其功能各异而已 新建一个空白的窗体 xff1a 窗体常用属性 xff1a name xff1a 窗体的名称 xff0

随机推荐

  • 解决vnc在win7下黑屏的问题

    解决vnc在win7下黑屏的问题 xff0c 在服务里面禁用vnc服务 xff0c 然后在启动里面加上服务程序 一切OK 黑屏的原因是启动了两份进程 xff0c 客户端连的总是后面一个 xff0c 有时黑屏有时不黑 只开一个进程就行了
  • 巧用“谷歌学术”,轻松完成参考文献

    巧用 谷歌学术 xff0c 轻松完成参考文献 作者 xff1a 毛斌 谷歌学术 是谷歌搜索引擎中的学术检索部分 xff0c 相对于知网 维普 万方 Pubmed等专业的论文数据库来说功能单薄了些 xff0c 但具有页面简约 搜索速度快 集国
  • 计算机网络——OSI网络层次的划分

    网络层次的划分 7 物理层 xff08 Physics Layer xff09 中继器 xff08 Repeater xff0c 也叫放大器 xff09 集线器 xff08 HUB xff09 6 数据链路层 xff08 Data Link
  • 深刻理解需求场景:三层 与 三见

    透彻理解用户的需求场景 xff0c 重要性不必多说 xff0c 这篇给几个极简的例子 需求有三层 观点和行为 目标和动机 人性和心智 工地上 xff0c 希望工人安全生产的口号 xff0c 如下写法依次对应着三层 进入工地 xff0c 记得
  • 三谈 钉钉、企微、飞书 的不同:优势即劣势

    最近几周和好几位钉钉 飞书的高管都有交流 xff0c 所以继续聊几句钉钉 企微 飞书给我的启发 一句话总结 xff0c 就是 xff1a 高水平的竞争 xff0c 优势即劣势 xff0c 所以只能把它看做自己的特点 xff0c 并找到独特的
  • 用户生态案例分析:以一场培训为例

    用户生态 利益相关人分析是个很有用的工具 一场简单的线下培训 xff0c 聚焦到现场实施时 xff0c 也有 用户生态 xff0c 以企业内训为例 xff0c 粗略分析一下 我们以 讲师 顾问 教练 这个角色为中心 xff0c 都有哪些利益
  • 2月了,开工,讲个需求蔓延的小故事

    年前有一段时间比较空 xff0c 小小折腾升级了一下家里的影音系统 xff0c 转念一想 xff0c 是个典型的需求蔓延案例 事情的起点是 客厅有一个天猫的投影 xff0c 放在和沙发旁的边几上 xff0c 投白墙 xff0c 白天偶尔想看
  • MYSQL知识点

    本文根据bilibili达内的大数据课程 xff08 BV1FQ4yR7SM xff09 总结 xff0c 受益匪浅 学习的比较慢 xff0c 学完某块 xff0c 我也会继续上传我的笔记 1 mysql基本概念 xff08 1 xff09
  • 用AI给娃定制绘本 #麻瓜+AI混合工作流试验 9

    这次试着用AI给娃定制一本绘本 xff0c 目的是解决一个问题 娃很喜欢国际象棋 xff0c 但在下棋的时候又很怕输 过程中尽量少人工参与 xff0c 先看半成品 xff0c 再说工作流 这个画风 xff0c 有点像娃喜欢的 工作细胞 主要
  • 逃避可耻但有用——当竞争太激烈时的一个通用解法

    往上游走 xff0c 去服务你的竞争对手 竞争激烈 xff0c 意味着供给太多而需求太少 但我们知道 xff0c 供需是有链条的 xff0c 当供需链条里某个生态位上供给太多 xff0c 即玩家太多 xff0c 也意味着这个生态位的需求也多
  • 尝试寻找一些合作伙伴,产品相关培训咨询服务介绍(2B/支持在线)

    若干年来 xff0c 在线下 xff0c 我提供的服务基本都是走进企业的 xff0c 几乎没开过公开课 xff08 如果行业会议上几十分钟的分享不算的话 xff09 而线上的音视频课 训练营等形式都也做过 xff0c 特别是过去的疫情三年
  • 产品总监可以通过培训提升么 to HR/管理者

    我觉得是不行的 从产品岗位从初级到高级 xff0c 越初级 xff0c 越可以通过学习一些标准化的知识 技能来 打底 xff0c 目的是提升下限 而到了总监级别 xff0c 默认已经知道了基础方法论 领域知识 xff08 不知道的也应该有自
  • 产品设计体会(十六)——Feature List

    这周来点实在的 xff0c 这两天主要在列新产品的Feature List 说一下自己感觉这个玩意应该怎么做 xff0c 其中吸取了叶老大原来的表格还有网上一些相关文章的内容 这个表是用Excel 做的 xff0c 一些简单的技巧 xff0
  • 【原创】产品经理值得看的16个博客

    这些都是我经常看的博客 xff0c 但没有一个产品经理的博客 xff0c xff1a xff09 xff08 注意逻辑 xff1a 我并没有说我经常看的博客里没有产品经理的博客 xff09 我觉得产品经理应该是通才 xff0c 本行功夫自不
  • 长假多图-生活中产品的小细节

    再长的休假也有结束的时候 xff0c 今天第一天上班 假期中跑了一些地方 xff0c 拍了一些照片 xff0c 晚上整理起来 xff0c 发现还是挺职业病的 xff0c 特地拍摄了一些生活中产品的小细节 xff0c 分享给大家 先是在南京
  • 给想转行做产品经理的同学

    已经很长一段时间了 xff0c 不断收到邮件 xff0c 有应届生 技术人员 运营人员等等 xff0c 说因为种种原因 xff08 排名第一的原因居然是看了 某本书 xff0c 囧 xff09 xff0c 发现自己真的很喜欢做产品经理 xf
  • [应用方案] 以NuMaker--PFM--M487 实现OLED屏显示驱动

    OLED屏是一种自发光的显示器件 xff0c 它有多种类型 xff0c 按接口分有I2C接口和SPI接口 xff0c 按色彩分有单色 双色及彩色屏 xff0c 按显示规格分为0 91 0 96寸等 本篇将介绍2种OLED屏的显示驱动 xff
  • LED发光原理以及恒流源驱动

    以前最常见的灯是白炽灯 xff0c 距今已经一百多年 xff0c 现在逐渐退出人类视野 xff0c 白炽灯的发光原理是灯丝通电后产生的热辐射发出光芒 xff0c 小时候用手摸白炽灯泡 xff0c 会很烫很烫 xff0c 因为它的大部分能量以
  • [转]Python图像resize前后颜色不一致问题

    转自 https www cnblogs com nwpuxuezha p 7236155 html 师弟很厉害 xff0c 可以加鸡腿了 以下为原文 xff1a 今天帮师姐解决一个bug xff0c 测试了Python图像resize前后
  • VTK、ITK安装及ITK读取图片、VTK显示示例(CMake)

    VTK ITK安装及ITK读取图片 VTK显示示例 文章目录 前言一 配置二 混合编程实例1 创建工程2 修改CMakeLists txt3 画界面mainwidow ui3 编程 xff08 1 xff09 4 运行 反思总结 前言 本文