C# opencvsharp 流程化-脚本化-(2)ROI

news2024/12/22 2:02:27

ROI

ROI也是经常需要使用的方法。特别是在图像编辑中。ROI又称感兴趣的区域,但是图像是矩阵是矩形的,感兴趣的是乱八七糟的,所以还有一个Mask需要了解一下的。

 public class RoiStep : IImageProcessingStep
 {
     public ImageProcessingStepType StepType => ImageProcessingStepType.Preprocessing;
     public string Name => "ROI";
     public ProcessingResult ProcessImage(Mat src, Dictionary<string, object> parameters)
     {
         // 获取ROI参数
         object roiObj = parameters["ROI"];
         object typeObj = parameters["Type"];

         // 检查是否获取到了ROI和Type
         if (roiObj == null || typeObj == null)
         {
             throw new ArgumentException("Missing required parameters ROI or Type.");
         }
         Rect rect= new Rect();
         // 尝试将ROI对象转换为Rect,如果失败则抛出异常
         try
         {
             dynamic rectdy = roiObj as dynamic;
             if (rectdy == null)
             {
                 throw new ArgumentException("ROI parameter must be a Rect object or a compatible equivalent.");
             }
             rect = new Rect();
             rect.X = rectdy.X;
             rect.Y = rectdy.Y;
             rect.Width= rectdy.Width;
             rect.Height = rectdy.Height;
             // 检查ROI是否有效
             if (rect.Width <= 0 || rect.Height <= 0)
             {
                 throw new ArgumentException("ROI width and height must be positive values.");
             }
         }
         catch (Exception ex)
         {
             throw new ArgumentException("Error converting ROI to Rect: " + ex.Message);
         }

         string type = typeObj.ToString().ToUpper();

         // 根据Type参数执行相应的操作
         switch (type)
         {
             case "ROI":
                 return new(src[rect].Clone());
             case "MASK1":
                 return new(ProcessMask1(src, rect));
             case "MASK2":
                 return new(ProcessMask2(src, rect));
             default:
                 throw new ArgumentException("Type parameter is unknown or invalid.");
         }
     }
     private Mat ProcessMask1(Mat src, Rect rect)
     {
         Mat dst = new Mat();
         Mat mask = Mat.Zeros(src.Size(), MatType.CV_8UC1).ToMat();
         mask[rect].SetTo(255);
         src.CopyTo(dst, mask);
         return dst;
     }

     private Mat ProcessMask2(Mat src, Rect rect)
     {
         Mat dst = new Mat();
         Mat mask1 = Mat.Zeros(src.Size(), MatType.CV_8UC1).ToMat();
         mask1[rect].SetTo(255);
         src.CopyTo(dst);
         dst.SetTo(0, mask1); 
         return dst;
     }
     public static Mat GetRoi(Mat src, Rect rect)
     {
         return src[rect].Clone();
     }
 }

 可以拿着代码去用用看。记得VS F12+ChatGPT

  1. Rect是opencvsharp中对矩形的定义 通过Mat[Rect] 就可以获得相应的区域。
  2. Mat.CopyTo(Mat m, InputArray? mask = null) 这个方法 直接中文翻译直接就是:我拷贝给你,你要哪些区域,就在mask的图像上给我标255。
  3. Mat.SetTo(InputArray value, Mat? mask = null)这个方法 直接中文翻译直接就是:设置图像颜色,你要哪些区域被设置颜色,就在mask的图像上给我标255。
  4. 不要看我的示例都是矩形的 你可以做圆形,梯形,三角形,人字拖形。Mask 是可以精确到像素点的哦!!所以你只需要在mask中给相应的像素点赋值,就能得到相应的形状。可以去参考官网像素赋值和Draw的方法。

效果图

放两张效果图睡觉了

原图

普通ROI 

 Mask1

Mask2

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

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

相关文章

wazuh-modules-sca-scan

sca模块主函数wm_sca_main -> wm_sca_start 检查policy文件中的每一个项目wm_sca_check_policy static int wm_sca_check_policy(const cJSON * const policy, const cJSON * const checks, OSHash *global_check_list) {if(!policy) {return 1;}const cJSON * const id c…

uniapp 自定义图标03

插入工程&#xff0c;修改名称文件内容 编译运行

在Windows本地用网页查看编辑服务器上的 jupyter notebook

​ Motivation: jupyter notebook 可以存中间变量&#xff0c;方便我调整代码&#xff0c;但是怎么用服务器的GPU并在网页上查看编辑呢&#xff1f; 参考 https://zhuanlan.zhihu.com/p/440080687 服务端(Ubuntu)&#xff1a; 激活环境 source activate my_env安装notebook …

【YOLO 项目实战】(11)YOLO8 数据集与模型训练

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO 项目实战】&#xff08;1&#xff09;YOLO5 环境配置与检测 【YOLO 项目实战】&#xff08;10&#xff09;YOLO8 环境配置与推理检测 【YOLO 项目实战】&#xff08;11&#xff09;YOLO8 数据…

Ubuntu22.04上安装esp-idf

一、安装准备# 建议使用Ubuntu 20.04 或 Ubuntu 22.04 操作系统 为了在 Ubuntu 22.04 中使用 esp-idf&#xff0c;需要安装一些依赖包 sudo apt-get install git wget flex bison gperf python3\python3-pip python3-venv cmake ninja-build ccache\libffi-dev libssl-dev dfu…

nginx-虚拟主机配置笔记

目录 nginx的安装可以查看nginx安装https://blog.csdn.net/m0_68472908/article/details/144609023?spm1001.2014.3001.5501 一、 基于域名 二、 基于IP 三、 基于端口 nginx的安装可以查看nginx安装https://blog.csdn.net/m0_68472908/article/details/144609023?spm100…

AlipayHK支付宝HK接入-商户收款(PHP)

一打开支付宝国际版 二、点开商户服务 三、下载源码

Soul Android端稳定性背后的那些事

前言&#xff1a;移动应用的稳定性对于用户体验和产品商业价值都有着至关重要的作用。应用崩溃会导致关键业务中断、用户留存率下降、品牌口碑变差、生命周期价值下降等影响&#xff0c;甚至会导致用户流失。因此&#xff0c;稳定性是APP质量构建体系中最基本和最关键的一环。当…

深度学习模型 DeepSeek-VL2 及其消费级显卡需求分析

DeepSeek-VL2 是由 DeepSeek 团队开发的一款先进的视觉语言模型&#xff0c;采用了混合专家&#xff08;MoE&#xff09;架构&#xff0c;旨在提升多模态理解能力。该模型包括三个版本&#xff1a;DeepSeek-VL2-Tiny、DeepSeek-VL2-Small 和 DeepSeek-VL2。每个版本具有不同的模…

首批|云轴科技ZStack成为开放智算产业联盟首批会员单位

近日 &#xff0c;在Linux基金会AI & Data及中国开源软件推进联盟的指导之下&#xff0c;开放智算产业联盟成立大会在北京成功召开。在大会上&#xff0c;联盟首次公布了组织架构并颁发了首批会员单位证书。凭借ZStack AIOS平台智塔和在智算领域的技术创新&#xff0c;云轴…

word实现两栏格式公式居中,编号右对齐

1、确定分栏的宽度 选定一段文字 点击分栏&#xff1a;如本文的宽度为22.08字符 2、将公式设置为 两端对齐&#xff0c;首行无缩进。 将光标放在 公式前面 点击 格式-->段落-->制表位 在“制表位位置”输入-->11.04字符&#xff08;22.08/211.04字符&#xff09;&…

go语言zero框架中config读取不到.env文件问题排查与解决方案

在Go语言中&#xff0c;如果你使用.env文件来存储环境变量&#xff0c;通常会用到一些第三方库&#xff0c;例如github.com/joho/godotenv&#xff0c;它可以帮助我们从.env文件中读取环境变量。然而&#xff0c;在使用godotenv时&#xff0c;可能会遇到一些问题&#xff0c;导…

修改vscode设置的原理

转载请标明出处&#xff1a;小帆的帆的专栏 修改vscode设置 首先需要理解的是&#xff0c;vscode的系统设置和插件设置都是通过settings.json文件管理的。 vscode中有三个Settings&#xff0c;三个Settings分别对应三个settings.json文件 Default Settings&#xff1a;默认…

Qt之修改窗口标题、图标以及自定义标题栏(九)

Qt开发 系列文章 - titles-icons-titlebars&#xff08;九&#xff09; 目录 前言 一、修改标题 二、添加图标 三、更换标题栏 1.效果演示 2.创建标题栏类 3.定义相关函数 4.使用标题栏类 总结 前言 在我们利用Qt设计软件时&#xff0c;经常需要修改窗口标题、更改软…

环境变量的知识

目录 1. 环境变量的概念 2. 命令行参数 2.1 2.2 创建 code.c 文件 2.3 对比 ./code 执行和直接 code 执行 2.4 怎么可以不带 ./ 2.4.1 把我们的二进制文件拷贝到 usr/bin 路径下&#xff0c;也不用带 ./ 了 2.4.2 把我们自己的路径添加到环境变量里 3. 认识PATH 3.…

【时时三省】(C语言基础)通讯录1

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 通讯录 1 .通讯录中能够存放1000个人的信息 每个人的信息&#xff1a; 名字年龄性别电话地址 2、增加人的信息 3、删除指定人的信息 4、修改指定人的信息 5&#xff0c;查找指定人的信…

Vulhub:Redis[漏洞复现]

4-unacc(Redis未授权代码执行) 启动漏洞环境 docker-compose up -d 阅读vulhub给出的漏洞文档 cat README.zh-cn.md # Redis 4.x/5.x 主从复制导致的命令执行 Redis是著名的开源Key-Value数据库&#xff0c;其具备在沙箱中执行Lua脚本的能力。 Redis未授权访问在4.x/5.0.5以…

【PGCCC】Postgresql Varlena 结构

前言 postgresql 会有一些变长的数据类型&#xff0c;存储都是采用 varlena 格式的&#xff08;除了 cstring 类型&#xff09;&#xff0c;通过语句 SELECT typname FROM pg_type WHERE typlen -1就可以看到所有采用 varlena 格式的数据类型&#xff0c;比如常见的 text &am…

Ubuntu搭建ES8集群+加密通讯+https访问

目录 写在前面 一、前期准备 1. 创建用户和用户组 2. 修改limits.conf文件 3. 关闭操作系统swap功能 4. 调整mmap上限 二、安装ES 1.下载ES 2.配置集群间安全访问证书密钥 3.配置elasticsearch.yml 4.修改jvm.options 5.启动ES服务 6.修改密码 7.启用外部ht…

LeetCode:144.前序遍历

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;144. 二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#x…