VTK学习之边缘检测(梯度算子)

news2024/12/26 23:31:14

参考博客:VTK修炼之道32:边缘检测_梯度算子_基于梯度的边缘检测算子_沈子恒的博客-CSDN博客

直接上源码:

#include <vtkAutoInit.h>
#include <vtkSmartPointer.h>
#include <vtkJPEGReader.h>
#include <vtkImageGradient.h>
#include <vtkImageMagnitude.h>
#include <vtkImageData.h>
#include <vtkImageShiftScale.h>
#include <vtkImageActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleImage.h>

VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);

void main()
{
	//输入原始图像
	vtkSmartPointer<vtkJPEGReader> reader = vtkSmartPointer<vtkJPEGReader>::New();
	reader->SetFileName("234.jpg");
	reader->Update();

	//先转换为灰度图
	vtkSmartPointer<vtkImageLuminance> luminanceFilter = vtkSmartPointer<vtkImageLuminance>::New();
	luminanceFilter->SetInputConnection(reader->GetOutputPort());
	luminanceFilter->Update();

	//开始加入边缘检测,计算图像梯度,图像梯度是一个向量,具有方向和大小
	vtkSmartPointer<vtkImageGradient> imgGradient = vtkSmartPointer<vtkImageGradient>::New();
	imgGradient->SetInputConnection(luminanceFilter->GetOutputPort());
	imgGradient->SetDimensionality(2);//设置计算图像的维数,默认是二维

	vtkSmartPointer<vtkImageMagnitude> imgMagnitude = vtkSmartPointer<vtkImageMagnitude>::New();
	imgMagnitude->SetInputConnection(imgGradient->GetOutputPort());
	imgMagnitude->Update();

	//设置灰度范围
	double Range[2];
	vtkSmartPointer<vtkImageData> getRange = vtkSmartPointer<vtkImageData>::New();
	imgMagnitude->GetOutput()->GetScalarRange(Range);//图像灰度范围最小值、最大值


	vtkSmartPointer<vtkImageShiftScale> imgShift = vtkSmartPointer<vtkImageShiftScale>::New();
	imgShift->SetOutputScalarTypeToUnsignedChar(); //强制类型转换 0~255
	imgShift->SetScale(255 / Range[1]); //灰度映射间距
	imgShift->SetInputConnection(imgMagnitude->GetOutputPort());
	imgShift->Update();

	vtkSmartPointer<vtkImageActor> origActor = vtkSmartPointer<vtkImageActor>::New();
	origActor->SetInputData(reader->GetOutput());

	vtkSmartPointer<vtkImageActor> GradientActor = vtkSmartPointer<vtkImageActor>::New();
	GradientActor->SetInputData(imgShift->GetOutput());

	double origView[4] = { 0, 0, 0.5, 1 };
	double gradientView[4] = { 0.5, 0, 1, 1 };
	vtkSmartPointer<vtkRenderer> origRender = vtkSmartPointer<vtkRenderer>::New();
	origRender->SetViewport(origView);
	origRender->AddActor(origActor);
	origRender->ResetCamera();
	origRender->SetBackground(1.0, 0, 0);

	vtkSmartPointer<vtkRenderer> gradientRender = vtkSmartPointer<vtkRenderer>::New();
	gradientRender->SetViewport(gradientView);
	gradientRender->AddActor(GradientActor);
	gradientRender->ResetCamera();
	gradientRender->SetBackground(1, 1, 1);

	vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
	renderWindow->AddRenderer(origRender);
	renderWindow->AddRenderer(gradientRender);
	renderWindow->SetSize(640, 320);
	renderWindow->Render();
	renderWindow->SetWindowName("Gradient Show");

	vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
	vtkSmartPointer<vtkInteractorStyleImage> style = vtkSmartPointer<vtkInteractorStyleImage>::New();
	interactor->SetRenderWindow(renderWindow);
	interactor->SetInteractorStyle(style);
	interactor->Initialize();
	interactor->Start();
}

 最终效果:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/662046.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

屏幕录制没有声音?快看看这2个方法!

案例&#xff1a;我今天尝试在电脑上进行屏幕录制&#xff0c;一开始一切都挺正常的。直到结束后&#xff0c;查看刚刚录制的视频发现没有声音。 【录屏只有画面没有声音&#xff0c;会影响视频的观感体验&#xff0c;甚至你根本不知道视频想表达的意思。那录屏的同时如何录制…

计算机基础--->网络(1)【分层模型、网络协议、HTTP等】

文章目录 网络分层模型OSI七层模型及其作用TCP/IP四层模型及作用为什么网络需要分层&#xff1f; 常见的网络协议应用层常见的协议传输层常见的协议网络层常见协议 从输入URL到页面展示的过程HTTP常见的状态码HTTP与HTTPS的区别HTTP是不保存状态的协议&#xff0c;如何保存用户…

华硕电脑怎么用U盘重装系统Win10?

华硕电脑怎么用U盘重装系统Win10&#xff1f;用户想用U盘给华硕电脑重装Win10系统&#xff0c;但不知道要怎么操作&#xff0c;这时候用户需要准备一台能够正常联网的华硕电脑&#xff0c;还有一个8G以上的U盘&#xff0c;最后根据小编分享的华硕电脑用U盘重装Win10系统教程操作…

MQTT Broker 规则引擎入门:快速指南

引言 规则引擎是一种能够根据输入数据按照预设规则进行决策或执行动作的软件系统。本文将向您介绍 EMQX MQTT Broker 的规则引擎功能&#xff0c;并阐述其在 MQTT 消息转换和数据集成方面的重要作用。同时&#xff0c;我们还将提供一份快速入门指南&#xff0c;通过实例帮助您…

【Spring Cloud】Gateway的配置与使用

Gateway其实是springcloud 原生的东西&#xff0c;但是我还是想放在这里讲&#xff0c;因为我们使用nacos时&#xff0c;前端调用服务之后&#xff0c;一般会调用到我们的网关上面&#xff0c;然后网关选择我们的nacos服务&#xff0c;再调用后端的服务 文章目录 &#x1f30f;…

极客故事|AI Hackathon:从每一个微小的时刻开始

上周末&#xff0c;由 SegmentFault 思否和 ONES 主办&#xff0c;SegmentFault AI Hackathon 杭州站暨思否 11 周年特别活动在杭州圆满结束。大赛延续 Hack with AI, Rebuild Everything with AI 的主题&#xff0c;鼓励开发者使用 Generative AI 技术构建创新应用&#xff0c…

UDP和TCP网络编程

UDP和TCP网络编程 UDP网络编程UDP通信流程&#xff08;回显服务&#xff09;测试扩展《UDP字典查找单词》 TCP网络编程TCP互相通信测试 缓存区和缓存 UDP网络编程 特点&#xff1a; 无连接&#xff1a;发送数据前不需要建立连接。不可靠&#xff1a;没有重发机制&#xff0c;无…

2023下半年杭州/广州/深圳软考(中/高级)认证,近期开班

软考是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职称资格考试。 系统集成…

一分钟让你轻松拿捏 求解斐波那契数列!

文章目录 斐波那契数列的概念递归求解第N个斐波那契数迭代求解第N个斐波那契数递归法和迭代法的比较 斐波那契数列的概念 斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列&#xff0c;因数学家莱昂纳多斐波那契&#xff08;LeonardodaFib…

windows10企业版安装西门子博途V15---01准备环境

网上看到了很多博途安装的文章或视频&#xff0c;一大部分都是你抄抄&#xff0c;我抄抄&#xff0c;滥鱼充饥&#xff0c;一是文章思路不清晰&#xff0c;二是具体安装环境不一致&#xff0c;三是视频讲解混乱&#xff0c;视频不清楚&#xff0c;操作有错误&#xff0c;其中不…

mac外接硬盘在哪里打开 mac外接硬盘用什么格式

Mac电脑具有出色的兼容性和高度的易用性&#xff0c;使得连接外接硬盘变得非常简单。但是&#xff0c;如果你不知道如何打开外接硬盘或者外接硬盘应该使用哪种格式&#xff0c;那么这将成为你使用Mac电脑过程中的一个难题。本篇文章将会向你介绍在Mac上如何打开外接硬盘&#x…

SpringCloud: SpringCloud面试题 ④

前言&#xff1a;面试题是一个以信息整合性看技术特性的一个手段。 1、什么是SpringCloud&#xff1f; springCloud是一系列框架的有序整合。目的在于大规模、分布式、微服务应用部署的解决方案。 2、什么是微服务&#xff1f; 微服务是将一个大而全的业务系统按照一定的业务…

机器学习与深度学习——基于潜在语义分析(LSA)的文档相似度计算

机器学习与深度学习——基于潜在语义分析&#xff08;LSA&#xff09;的文档相似度计算 基于潜在语义分析&#xff08;LSA&#xff09;是一种使用数学和统计方法来分析文本数据的技术。该技术可用于发现文本之间的关系&#xff0c;以及为文本提供有关其含义的更深层次的信息。…

【twcc】学习1:cc-feedback包构造及其接收处理

我的代码是m79,大神的代码看起来比我的新。核心的 ProcessTransportFeedbackInner 竟然没有找到。 webrtc源码分析(8)-拥塞控制(上)-码率预估 再次膜拜一下大神的分析。 本文大量引用大神的论述。 cc-controller下最重要的几个函数来介绍码率控制的核心过程,其分别是OnProce…

perf之cpu性能计数器

在win10主机上的VMware虚拟机里的centos7执行 perf list cache&#xff0c;显示空&#xff1a; [workcontrol-plane ~]$ perf list cache List of pre-defined events (to be used in -e): [workcontrol-plane ~]$ 原因是cpu cache的计数需要硬件支持&#xff0c;在虚拟机里…

使用omp和mpi并行技术实现蒙特卡罗算法实验 (MonteCarlo)

蒙特卡洛算法思想: 画一个正方形和一个内切圆然后在图形上面随机撒点&#xff0c;数一下落在圆 内和正方形内的点的数量之比&#xff0c;就是二者面积之比, 也就是π/4。 大数定理告诉我们&#xff0c;随着样本数量的增大&#xff0c;我们用这种方式模拟出来的值应该是越来越…

玩转电脑|带你了解如何快速查看电脑开关机时间

目录 前言 1、打开管理 2、打开事件查看器 3、打开windows日志 5、获取开机事件 6、获取关机事件 7、保存事件 8、保存事件文件 9、打开事件文件 前言 最近因为一些原因作者想要查看自己电脑每天的的开关机时间记录&#xff0c;但是不知道怎么进行查看&#xff0c;于是在网…

C++重温笔记(十): C++输入输出流

1. 写在前面 c在线编译工具&#xff0c;可快速进行实验: https://www.bejson.com/runcode/cpp920/ 这段时间打算重新把c捡起来&#xff0c; 实习给我的一个体会就是算法工程师是去解决实际问题的&#xff0c;所以呢&#xff0c;不能被算法或者工程局限住&#xff0c;应时刻提…

龙智携手Atlassian亮相DevOps国际峰会:释放团队潜力,以协作挑战不可能

2023年6月29日到30日&#xff0c;龙智将亮相DevOps国际峰会 北京站213展位。本次参展&#xff0c;我们将呈现Atlassian ITSM、DevOps以及工作管理三大解决方案&#xff0c;帮助您释放团队的力量&#xff0c;将不可能变成可能。 立即预约龙智专家面对面交流>>> 龙智自…

BuildAdmin商业级后台管理系统

🚀 CRUD代码生成 图形化拖拽生成后台增删改查代码,自动创建数据表,大气实用的表格、多达22种表单组件支持、拖拽排序、受权限控制的编辑和删除、支持关联表等等,可为您节省大量开发时间。[ 视频介绍 | 使用文档 ] 💥 内置WEB终端 我们内置了WEB终端以实现一些理想中的…