当前位置: 首页 > article >正文

VTK 显示文字、图片及2D/3D图

1. 基本环境设置

首先确保你已经安装了VTK库,并配置好了C++开发环境。

#include <vtkSmartPointer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>

2. 显示文字

2D文字

#include <vtkTextActor.h>
#include <vtkTextProperty.h>void Show2DText() {// 创建渲染器和渲染窗口auto renderer = vtkSmartPointer<vtkRenderer>::New();auto renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);// 创建交互器auto interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();interactor->SetRenderWindow(renderWindow);// 创建文本actorauto textActor = vtkSmartPointer<vtkTextActor>::New();textActor->SetInput("Hello VTK!");// 设置文本属性auto textProperty = textActor->GetTextProperty();textProperty->SetFontSize(24);textProperty->SetColor(1.0, 0.0, 0.0); // 红色textProperty->SetJustificationToCentered();// 添加文本到渲染器renderer->AddActor2D(textActor);// 开始渲染renderWindow->Render();interactor->Start();
}

3D文字

#include <vtkVectorText.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>void Show3DText() {auto renderer = vtkSmartPointer<vtkRenderer>::New();auto renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);auto interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();interactor->SetRenderWindow(renderWindow);// 创建3D文字auto textSource = vtkSmartPointer<vtkVectorText>::New();textSource->SetText("3D Text");// 创建mapper和actorauto mapper = vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputConnection(textSource->GetOutputPort());auto actor = vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);actor->GetProperty()->SetColor(0.0, 1.0, 0.0); // 绿色renderer->AddActor(actor);renderer->SetBackground(0.1, 0.2, 0.4); // 深蓝色背景renderWindow->Render();interactor->Start();
}

 中文支持‌:需转换UTF-8编码并使用中文字体文件(如simsun.ttf

3. 显示图片

2D图片

#include <vtkAutoInit.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkSmartPointer.h>
#include <vtkImageReader2Factory.h>
#include <vtkImageReader2.h>
#include <vtkImageActor.h>
#include <vtkImageMapper3D.h>VTK_MODULE_INIT(vtkRenderingOpenGL2);       // OpenGL 渲染
VTK_MODULE_INIT(vtkInteractionStyle);       // 交互void Show2DImage(const char* filename) {auto renderer = vtkSmartPointer<vtkRenderer>::New();auto renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);auto interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();interactor->SetRenderWindow(renderWindow);// 读取图片auto readerFactory = vtkSmartPointer<vtkImageReader2Factory>::New();auto reader = readerFactory->CreateImageReader2(filename);reader->SetFileName(filename);reader->Update();// 创建图片actorauto imageActor = vtkSmartPointer<vtkImageActor>::New();imageActor->GetMapper()->SetInputConnection(reader->GetOutputPort());renderer->AddActor(imageActor);renderer->ResetCamera();renderWindow->Render();interactor->Start();reader->Delete();
}

vtk头文件和库文件: 

INCLUDEPATH += "C:/Program Files/VTK/include/vtk-8.2"
LIBS+= -L"C:/Program Files/VTK/lib"# 必需的核心 VTK 库
LIBS += -lvtksys-8.2
LIBS += -lvtkCommonColor-8.2
LIBS += -lvtkCommonCore-8.2
LIBS += -lvtkCommonDataModel-8.2
LIBS += -lvtkFiltersCore-8.2
LIBS += -lvtkInteractionStyle-8.2
LIBS += -lvtkRenderingCore-8.2
LIBS += -lvtkRenderingOpenGL2-8.2
LIBS += -lvtkViewsQt-8.2
LIBS += -lvtkGUISupportQt-8.2
LIBS += -lvtkRenderingAnnotation-8.2
LIBS += -lvtkCommonExecutionModel-8.2
LIBS += -lvtkIOImage-8.2

4. 显示2D图形

#include <vtkAutoInit.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkPoints.h>
#include <vtkCellArray.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper2D.h>
#include <vtkActor2D.h>
#include <vtkProperty2D.h>VTK_MODULE_INIT(vtkRenderingOpenGL2);       // OpenGL 渲染
VTK_MODULE_INIT(vtkInteractionStyle);       // 交互void Show2DShape() {auto renderer = vtkSmartPointer<vtkRenderer>::New();auto renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);auto interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();interactor->SetRenderWindow(renderWindow);// 创建点auto points = vtkSmartPointer<vtkPoints>::New();points->InsertNextPoint(100, 100, 0);points->InsertNextPoint(200, 100, 0);points->InsertNextPoint(200, 200, 0);points->InsertNextPoint(100, 200, 0);// 创建多边形auto polygon = vtkSmartPointer<vtkCellArray>::New();polygon->InsertNextCell(5);polygon->InsertCellPoint(0);polygon->InsertCellPoint(1);polygon->InsertCellPoint(2);polygon->InsertCellPoint(3);polygon->InsertCellPoint(0);// 创建PolyDataauto polygonPolyData = vtkSmartPointer<vtkPolyData>::New();polygonPolyData->SetPoints(points);polygonPolyData->SetLines(polygon);// 创建mapper和actorauto mapper = vtkSmartPointer<vtkPolyDataMapper2D>::New();mapper->SetInputData(polygonPolyData);auto actor = vtkSmartPointer<vtkActor2D>::New();actor->SetMapper(mapper);actor->GetProperty()->SetColor(1.0, 0.0, 0.0); // 红色renderer->AddActor(actor);renderWindow->Render();interactor->Start();
}

vtk头文件和库文件: 

INCLUDEPATH += "C:/Program Files/VTK/include/vtk-8.2"
LIBS+= -L"C:/Program Files/VTK/lib"# 必需的核心 VTK 库
LIBS += -lvtksys-8.2
LIBS += -lvtkCommonColor-8.2
LIBS += -lvtkCommonCore-8.2
LIBS += -lvtkCommonDataModel-8.2
LIBS += -lvtkFiltersCore-8.2
LIBS += -lvtkInteractionStyle-8.2
LIBS += -lvtkRenderingCore-8.2
LIBS += -lvtkRenderingOpenGL2-8.2
LIBS += -lvtkViewsQt-8.2
LIBS += -lvtkGUISupportQt-8.2
LIBS += -lvtkRenderingAnnotation-8.2
LIBS += -lvtkRenderingFreeType-8.2
LIBS += -lvtkCommonExecutionModel-8.2

5. 显示3D图形

#include <vtkAutoInit.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkSmartPointer.h>
#include <vtkConeSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkProperty.h>VTK_MODULE_INIT(vtkRenderingOpenGL2);       // OpenGL 渲染
VTK_MODULE_INIT(vtkInteractionStyle);       // 交互void Show3DShape() {auto renderer = vtkSmartPointer<vtkRenderer>::New();auto renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);auto interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();interactor->SetRenderWindow(renderWindow);// 创建圆锥体auto cone = vtkSmartPointer<vtkConeSource>::New();cone->SetHeight(3.0);cone->SetRadius(1.0);cone->SetResolution(10);// 创建mapper和actorauto mapper = vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputConnection(cone->GetOutputPort());auto actor = vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);actor->GetProperty()->SetColor(0.2, 0.63, 0.79); // 蓝色renderer->AddActor(actor);renderer->SetBackground(0.1, 0.2, 0.4);renderer->ResetCamera();renderWindow->Render();interactor->Start();
}

 vtk头文件和库文件: 

INCLUDEPATH += "C:/Program Files/VTK/include/vtk-8.2"
LIBS+= -L"C:/Program Files/VTK/lib"# 必需的核心 VTK 库
LIBS += -lvtksys-8.2
LIBS += -lvtkCommonColor-8.2
LIBS += -lvtkCommonCore-8.2
LIBS += -lvtkCommonDataModel-8.2
LIBS += -lvtkFiltersCore-8.2
LIBS += -lvtkInteractionStyle-8.2
LIBS += -lvtkRenderingCore-8.2
LIBS += -lvtkRenderingOpenGL2-8.2
LIBS += -lvtkViewsQt-8.2
LIBS += -lvtkGUISupportQt-8.2
LIBS += -lvtkRenderingAnnotation-8.2
LIBS += -lvtkCommonExecutionModel-8.2
LIBS += -lvtkFiltersSources-8.2

使用体绘制: 

#include <vtkSmartPointer.h>
#include <vtkMetaImageReader.h>
#include <vtkGPUVolumeRayCastMapper.h>
#include <vtkVolumeProperty.h>
#include <vtkColorTransferFunction.h>
#include <vtkPiecewiseFunction.h>
#include <vtkVolume.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>void Show3DVolume(const char* filename) {// 创建渲染器和渲染窗口auto renderer = vtkSmartPointer<vtkRenderer>::New();auto renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);auto interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();interactor->SetRenderWindow(renderWindow);// 读取3D图像数据(如.mhd/.mha格式)auto reader = vtkSmartPointer<vtkMetaImageReader>::New();reader->SetFileName(filename);reader->Update();// 创建体积映射器auto volumeMapper = vtkSmartPointer<vtkGPUVolumeRayCastMapper>::New();volumeMapper->SetInputConnection(reader->GetOutputPort());// 创建体积属性auto volumeProperty = vtkSmartPointer<vtkVolumeProperty>::New();volumeProperty->ShadeOn();volumeProperty->SetInterpolationTypeToLinear();// 设置颜色传输函数auto colorTransferFunction = vtkSmartPointer<vtkColorTransferFunction>::New();colorTransferFunction->AddRGBPoint(0, 0.0, 0.0, 0.0);colorTransferFunction->AddRGBPoint(500, 1.0, 0.5, 0.3);colorTransferFunction->AddRGBPoint(1000, 1.0, 1.0, 0.9);volumeProperty->SetColor(colorTransferFunction);// 设置不透明度传输函数auto opacityTransferFunction = vtkSmartPointer<vtkPiecewiseFunction>::New();opacityTransferFunction->AddPoint(0, 0.0);opacityTransferFunction->AddPoint(500, 0.1);opacityTransferFunction->AddPoint(1000, 0.3);volumeProperty->SetScalarOpacity(opacityTransferFunction);// 创建体积对象auto volume = vtkSmartPointer<vtkVolume>::New();volume->SetMapper(volumeMapper);volume->SetProperty(volumeProperty);// 添加到渲染器renderer->AddVolume(volume);renderer->SetBackground(0.1, 0.2, 0.4);renderer->ResetCamera();renderWindow->Render();interactor->Start();
}

 使用固定平面切片显示:

#include <vtkImagePlaneWidget.h>void Show3DVolumeWithSlices(const char* filename) {auto renderer = vtkSmartPointer<vtkRenderer>::New();auto renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);auto interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();interactor->SetRenderWindow(renderWindow);// 读取3D图像数据auto reader = vtkSmartPointer<vtkMetaImageReader>::New();reader->SetFileName(filename);reader->Update();// 创建三个切片平面(横断面、冠状面、矢状面)double* center = reader->GetOutput()->GetCenter();// 横断面auto planeWidgetX = vtkSmartPointer<vtkImagePlaneWidget>::New();planeWidgetX->SetInteractor(interactor);planeWidgetX->SetInputConnection(reader->GetOutputPort());planeWidgetX->SetPlaneOrientationToXAxes();planeWidgetX->SetSliceIndex(static_cast<int>(center[0]));planeWidgetX->DisplayTextOn();planeWidgetX->SetDefaultRenderer(renderer);planeWidgetX->On();// 冠状面auto planeWidgetY = vtkSmartPointer<vtkImagePlaneWidget>::New();planeWidgetY->SetInteractor(interactor);planeWidgetY->SetInputConnection(reader->GetOutputPort());planeWidgetY->SetPlaneOrientationToYAxes();planeWidgetY->SetSliceIndex(static_cast<int>(center[1]));planeWidgetY->DisplayTextOn();planeWidgetY->SetDefaultRenderer(renderer);planeWidgetY->On();// 矢状面auto planeWidgetZ = vtkSmartPointer<vtkImagePlaneWidget>::New();planeWidgetZ->SetInteractor(interactor);planeWidgetZ->SetInputConnection(reader->GetOutputPort());planeWidgetZ->SetPlaneOrientationToZAxes();planeWidgetZ->SetSliceIndex(static_cast<int>(center[2]));planeWidgetZ->DisplayTextOn();planeWidgetZ->SetDefaultRenderer(renderer);planeWidgetZ->On();renderer->SetBackground(0.1, 0.1, 0.1);renderWindow->SetSize(800, 600);renderWindow->Render();interactor->Start();
}

6. 在3D场景中添加文字标注

void Show3DSceneWithText() {auto renderer = vtkSmartPointer<vtkRenderer>::New();auto renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);auto interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();interactor->SetRenderWindow(renderWindow);// 创建3D对象(球体)auto sphereSource = vtkSmartPointer<vtkSphereSource>::New();sphereSource->SetRadius(1.0);auto sphereMapper = vtkSmartPointer<vtkPolyDataMapper>::New();sphereMapper->SetInputConnection(sphereSource->GetOutputPort());auto sphereActor = vtkSmartPointer<vtkActor>::New();sphereActor->SetMapper(sphereMapper);sphereActor->GetProperty()->SetColor(1.0, 0.0, 0.0);// 创建3D文字标注auto textSource = vtkSmartPointer<vtkVectorText>::New();textSource->SetText("Sphere");auto textMapper = vtkSmartPointer<vtkPolyDataMapper>::New();textMapper->SetInputConnection(textSource->GetOutputPort());auto textActor = vtkSmartPointer<vtkActor>::New();textActor->SetMapper(textMapper);textActor->SetPosition(1.5, 0, 0);textActor->GetProperty()->SetColor(1.0, 1.0, 1.0);// 添加所有对象到渲染器renderer->AddActor(sphereActor);renderer->AddActor(textActor);renderer->SetBackground(0.1, 0.1, 0.1);renderer->ResetCamera();renderWindow->SetSize(800, 600);renderWindow->Render();interactor->Start();
}

7. 完整流程示例

#include <vtkAutoInit.h>
#include <vtkDataSetMapper.h>
#include <vtkDoubleArray.h>
#include <vtkGenericOpenGLRenderWindow.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPointData.h>
#include <vtkPoints.h>
#include <vtkPolyData.h>
#include <vtkProperty.h>
#include <vtkRenderer.h>
#include <vtkScalarBarActor.h>
#include <vtkTriangle.h>
#include <vtkUnstructuredGrid.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkRendererCollection.h>
#include <vtkVectorText.h>
#include <vtkPolyDataMapper.h>
#include <vtkTextActor.h>
#include <vtkTextProperty.h>
#include <vtkRenderWindowInteractor.h>VTK_MODULE_INIT(vtkRenderingOpenGL2);       // OpenGL 渲染
VTK_MODULE_INIT(vtkInteractionStyle);       // 交互
VTK_MODULE_INIT(vtkRenderingFreeType);      // 关键:启用文字渲染int main() {// 初始化渲染器、窗口vtkNew<vtkRenderer> renderer;vtkNew<vtkRenderWindow> window;window->AddRenderer(renderer);// 1. 添加3D文字vtkNew<vtkVectorText> text3D;text3D->SetText("3D Text");vtkNew<vtkPolyDataMapper> mapper;mapper->SetInputConnection(text3D->GetOutputPort());vtkNew<vtkActor> actor;actor->SetMapper(mapper);actor->SetPosition(0, 0, 0);renderer->AddActor(actor);// 2. 添加2D文字vtkNew<vtkTextActor> text2D;text2D->SetInput("2D Overlay");text2D->GetTextProperty()->SetFontSize(20);text2D->SetPosition(50, 50);  // 屏幕坐标renderer->AddActor2D(text2D);// 3. 启动交互vtkNew<vtkRenderWindowInteractor> interactor;interactor->SetRenderWindow(window);window->Render();interactor->Start();
}

vtk头文件和库文件:

INCLUDEPATH += "C:/Program Files/VTK/include/vtk-8.2"
LIBS+= -L"C:/Program Files/VTK/lib"# 必需的核心 VTK 库
LIBS += -lvtksys-8.2
LIBS += -lvtkCommonColor-8.2
LIBS += -lvtkCommonCore-8.2
LIBS += -lvtkCommonDataModel-8.2
LIBS += -lvtkFiltersCore-8.2
LIBS += -lvtkInteractionStyle-8.2
LIBS += -lvtkRenderingCore-8.2
LIBS += -lvtkRenderingOpenGL2-8.2
LIBS += -lvtkViewsQt-8.2
LIBS += -lvtkGUISupportQt-8.2
LIBS += -lvtkRenderingAnnotation-8.2
LIBS += -lvtkRenderingFreeType-8.2
LIBS += -lvtkCommonExecutionModel-8.2

 8. 混合2D/3D场景的关键技巧

  1. 坐标系区分‌:
    • 2D元素(文字/图片)用AddActor2D
    • 3D元素(模型/文本)用AddActor
  2. 位置控制‌:
    • 2D元素:通过SetPosition设置屏幕坐标(范围0~1)
    • 3D元素:通过SetPosition设置世界坐标
  3. 交互优化‌:
    vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
    interactor->SetInteractorStyle(style);  // 启用3D交互模式

9. 支持的3D图像格式

VTK支持多种3D图像格式,常用的包括:

  1. MetaImage格式 (.mhd/.mha)

    • 使用vtkMetaImageReader

  2. DICOM序列

    • 使用vtkDICOMImageReader

  3. NIfTI格式 (.nii)

    • 使用vtkNIFTIImageReader

  4. Analyze格式 (.hdr/.img)

    • 使用vtkAnalyzeReader

  5. 原始数据

    • 使用vtkImageReader2并设置适当参数

10. 性能优化技巧

  1. 对于大型数据集,使用vtkGPUVolumeRayCastMapper替代CPU渲染器

  2. 适当降低采样率以提高交互性能

  3. 使用多分辨率技术,在交互时显示低分辨率版本

  4. 考虑使用vtkImageResample预先降低数据分辨率

  5. 对于静态视图,可以预先计算并缓存渲染结果

相关文章:

VTK 显示文字、图片及2D/3D图

1. 基本环境设置 首先确保你已经安装了VTK库&#xff0c;并配置好了C开发环境。 #include <vtkSmartPointer.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> #include <vtkRenderer.h> 2. 显示文字 2D文字 #include &l…...

小白如何在cursor中使用mcp服务——以使用notion的api为例

1. 首先安装node.js,在这一步的时候不要勾选不要勾选 2. 安装完之后,前往notion页面 我的创作者个人资料 | Notion 前往集成页面&#xff0c;添加新集成&#xff0c;自己输入名字&#xff0c;选择内部 新建完之后&#xff0c;进入选择只读 复制密匙 然后前往cursor页面 新建…...

引领AI安全新时代 Accelerate 2025北亚巡展·北京站成功举办

6月5日&#xff0c;网络安全行业年度盛会——"Accelerate 2025北亚巡展北京站"圆满落幕&#xff01;来自智库、产业界、Fortinet管理层及技术团队的权威专家&#xff0c;与来自各行业的企业客户代表齐聚一堂&#xff0c;围绕"AI智御全球引领安全新时代"主题…...

为什么说数列是特殊的函数

文章目录 前情概要函数特性特殊之处典例剖析前情概要 高三的学生几乎都听老师说过,数列是特殊的函数,那么如何理解这句话呢,无外乎需要关注两点:①函数性,②特殊性,以下举例说明,帮助各位学子理解。 函数特性 既然是按照一定的次序排列而成的一列数字,那么这些数字(…...

解决uniapp开发app map组件最高层级 遮挡自定义解决底部tabbar方法

subNvue&#xff0c;是 vue 页面的原生子窗体&#xff0c;把weex渲染的原生界面当做 vue 页面的子窗体覆盖在页面上。它不是全屏页面&#xff0c;它给App平台vue页面中的层级覆盖和原生界面自定义提供了更强大和灵活的解决方案。它也不是组件&#xff0c;就是一个原生子窗体。 …...

96. 2017年蓝桥杯省赛 - Excel地址(困难)- 进制转换

96. Excel地址&#xff08;进制转换&#xff09; 1. 2017年蓝桥杯省赛 - Excel地址&#xff08;困难&#xff09; 标签&#xff1a;2017 省赛 1.1 题目描述 Excel 单元格的地址表示很有趣&#xff0c;它使用字母来表示列号。 比如&#xff0c; A 表示第 1 列&#xff0c;…...

PPT转图片拼贴工具 v1.0

软件介绍 这个软件的作用就是将单个PPT的每一页转换为单独的图片&#xff0c;然后将图片进行拼接起来。 但是我没有还没有解决一次性处理多个文件。 效果展示如下&#xff1a; 软件安装 软件源码 import os import re import win32com.client from PIL import Imagedef con…...

大模型在脑梗塞后遗症风险预测及治疗方案制定中的应用研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与方法 1.3 国内外研究现状 二、脑梗塞概述 2.1 定义与分类 2.2 发病机制与病理生理过程 2.3 临床表现与诊断方法 三、大模型技术原理与应用现状 3.1 基本概念与技术架构 3.2 在医疗领域的应用案例与优势 3.3 适用于…...

Qwen2.5-VL - 模型结构

Qwen2.5-VL - 模型结构 flyfish 配置项 (Configuration)Qwen2.5-VL-3BQwen2.5-VL-7BQwen2.5-VL-72B视觉Transformer (ViT)隐藏层大小 (Hidden Size)128012801280层数 (# Layers)323232头数 (# Num Heads)161616中间层大小 (Intermediate Size)345634563456patch尺寸 (Patch S…...

【QT常用技术讲解】多线程执行后台命令行的两种方式(后台运行和返回打印信息)

前言 QT调用后台命令行&#xff0c;通常有两种场景&#xff1a;执行命令&#xff0c;等待并获取返回结果&#xff1b;执行命令&#xff0c;让程序后台一直执行(孤儿进程)&#xff0c;不需要获取命令返回的结果。以下是分享在国产信创桌面操作系统&#xff08;麒麟kylin、统信UO…...

【行驶证识别成表格】批量OCR行驶证识别与Excel自动化处理系统,行驶证扫描件和照片图片识别后保存为Excel表格,基于QT和华为ocr识别的实现教程

在车辆管理、物流运输、保险理赔等领域&#xff0c;经常需要处理大量的行驶证信息。传统的人工录入方式效率低、易出错&#xff0c;而使用 OCR 技术可以自动识别行驶证图片中的文字信息&#xff0c;极大提高数据处理效率。该系统可以应用于以下场景&#xff1a; 保险公司快速…...

Linux--进程的状态

1.进程状态在所有系统中宏观的大致模型 1.1、进程状态与变迁 基础状态&#xff1a;涵盖创建、就绪、运行、阻塞、结束等核心状态&#xff0c;描述进程从诞生到消亡的生命周期流转&#xff0c;如创建后进入就绪&#xff0c;争抢 CPU 进入运行&#xff0c;遇 I/O 或资源等待则转…...

(nice!!!)(LeetCode每日一题)2434. 使用机器人打印字典序最小的字符串(贪心+栈)

题目&#xff1a;2434. 使用机器人打印字典序最小的字符串 思路&#xff1a;贪心栈&#xff0c;时间复杂度0(n)。 字符串t其实就是栈&#xff0c;后进先出。要让p的字典序最小&#xff0c;那当然是t每次弹出的字符&#xff0c;都小于或等于“剩下未入t里的字符串的字符”&#…...

008-libb64 你有多理解base64?-C++开源库108杰

正确认识二进制数据和文本数据的关系;深刻理解 base64 编码核心等式&#xff1a;256256256 64646464 经常听到——以至 AI 也会这么回答的&#xff1a;base64 编码用于将二进制数据&#xff0c;转换为文本数据。但是&#xff0c;众所周知&#xff0c;在数字电子计算机中&#…...

电子电路基础2(杂乱)

电容器 容抗 滤波电路&#xff08;半波&#xff09; 全波整流 因为A点的电压比D点的电压高&#xff0c;所以D点会走向C点 电感基础 什么是电感器&#xff1f; 一种把电能转换成磁能&#xff0c;并可以将磁能存储起来的元器件。 在嵌入式开发中&#xff0c;电感主要用于动态能量…...

LazyOwn RedTeam/APT 框架是第一个具有人工智能驱动的 CC 的 RedTeam 框架

一、软件介绍 文末提供程序和源码下载 LazyOwn RedTeam/APT 框架是第一个具有人工智能驱动的 C&C 的 RedTeam 框架&#xff0c;具有隐藏活动的 rootkit、与 Windows/Linux/Mac OSX 兼容的不可检测的可塑植入物&#xff0c;以及自配置后门。凭借其 Web 界面和强大的…...

电脑的ip地址会自动变怎么办?原因解析和解决方法

在当今互联网时代&#xff0c;IP地址是每台联网设备的"身份证"&#xff0c;但很多用户都遇到过IP地址自动变化的情况。这种现象既可能发生在内网&#xff08;局域网&#xff09;环境中&#xff0c;也可能出现在外网&#xff08;公网&#xff09;连接中。要理解IP地址…...

PDF 转 HTML5 —— HTML5 填充图形不支持 Even-Odd 奇偶规则?(第一部分)

在填充 PDF 中的图形时&#xff08;以及许多其他技术中&#xff09;&#xff0c;你可以选择使用 Even-Odd&#xff08;奇偶&#xff09; 或 Non-Zero&#xff08;非零&#xff09; 填充规则。 对于那些已经在想“你在说啥&#xff1f;”的朋友&#xff0c;别担心&#xff0c;我…...

C++.OpenGL (5/64)变换(Transformation)

变换(Transformation) 变换矩阵核心概念 #mermaid-svg-OvPP9vqkY9MRAHyd {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OvPP9vqkY9MRAHyd .error-icon{fill:#552222;}#mermaid-svg-OvPP9vqkY9MRAHyd .error-tex…...

优化电脑的磁盘和驱动器提高电脑性能和延长硬盘寿命?

磁盘优化 磁盘清理&#xff1a; 使用系统自带的磁盘清理工具&#xff08;如Windows的“磁盘清理”&#xff09;删除不必要的文件。清空回收站。删除临时文件和缓存。 磁盘碎片整理&#xff08;针对机械硬盘&#xff09;&#xff1a; 定期进行磁盘碎片整理&#xff0c;以提高文…...

【八股消消乐】MySQL参数优化大汇总

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本专栏《八股消消乐》旨在记录个人所背的八股文&#xff0c;包括Java/Go开发、Vue开发、系统架构、大模型开发、具身智能、机器学习、深度学习、力扣算法等相关知识点&#xff…...

JavaSec-SPEL - 表达式注入

简介 SPEL(Spring Expression Language)&#xff1a;SPEL是Spring表达式语言&#xff0c;允许在运行时动态查询和操作对象属性、调用方法等&#xff0c;类似于Struts2中的OGNL表达式。当参数未经过滤时&#xff0c;攻击者可以注入恶意的SPEL表达式&#xff0c;从而执行任意代码…...

在 Caliper 中执行不同合约的方法

在 Caliper 中执行不同的智能合约需要通过正确配置工作负载(workload)和测试轮次(rounds),下面我将详细介绍如何执行不同的合约。 1. 通过 config.yaml 配置不同测试轮次 你可以在 config.yaml 中为不同的合约定义不同的测试轮次: rounds:- label: test-helloworlddescript…...

CSS 平铺+自动换行效果

先上效果图 样式 <template><div class"activity-questions"><h1>活动题库</h1><div v-if"loading" class"loading">加载中...</div><div v-else><div v-if"questions.length 0" clas…...

微服务网关SpringCloudGateway+SaToken鉴权

目录 概念 前置知识回顾 拿到UserInfo 用于自定义权限和角色的获取逻辑 最后进行要进行 satoken 过滤器全局配置 概念 做权限认证的时候 我们首先要明确两点 我们需要的角色有几种 我们需要的权限有几种 角色 分两种 ADMIN 管理员 &#xff1a;可管理商品 CUSTIOMER 普通…...

永磁同步电机控制算法--模糊PI转速控制器

一、原理介绍 在常规的PID控制系统的基础上提出了一种模糊PID以及矢量变换方法相结合的控制系统&#xff0c;经过仿真分析对比证明&#xff1a; 模糊PID控制系统能够有效的提高永磁同步电机的转速响应速度&#xff0c;降低转矩脉动&#xff0c;增强了整体控制系统的抗干扰能力…...

Elasticsearch集群最大分片数设置详解:从问题到解决方案

目录 前言 1 问题背景&#xff1a;重启后设置失效 2 核心概念解析 2.1 什么是分片(Shard)&#xff1f; 2.2 cluster.max_shards_per_node的作用 2.3 默认值是多少&#xff1f; 3 参数设置的两种方式 3.2 持久性设置(persistent) 3.2 临时设置(transient) 4 问题解决方…...

计算机视觉与深度学习 | 基于MATLAB的图像特征提取与匹配算法总结

基于MATLAB的图像特征提取与匹配算法全面指南 图像特征提取与匹配 基于MATLAB的图像特征提取与匹配算法全面指南一、图像特征提取基础特征类型分类二、点特征提取算法1. Harris角点检测2. SIFT (尺度不变特征变换)3. SURF (加速鲁棒特征)4. FAST角点检测5. ORB (Oriented FAST …...

DVWA全靶场

目录 暴破 Low - 万能密码 Medium - 转义 High - Token Impossible 命令注入 CSRF跨站请求伪造 - 抓包 Low Medium - 域名限制 High - 域名限制xss 文件包含 - 页面点点点 Low Medium - 过滤http:// High - file Impossible - 写死 文件上传 Low Medium - 文件…...

【反无人机检测】C2FDrone:基于视觉Transformer网络的无人机间由粗到细检测

C2FDrone&#xff1a;基于视觉Transformer网络的无人机间由粗到细检测 C2FDrone: Coarse-to-Fine Drone-to-Drone Detection using Vision Transformer Networks 论文链接 摘要 摘要——基于视觉的无人机间检测系统在碰撞规避、反制敌对无人机和搜救行动等应用中至关重要。然…...