2.2.5 C#中显示控件BDPictureBox 的实现----ROI交互续2

2.2.5 C#中显示控件BDPictureBox 的实现----ROI交互续2

1 ROI数组作用说明

变量:m_ROIs[5]
ROI 使用效果图
ROIs效果图

ROI数组说明
ROIs数组图片

2 ROI显示逻辑图

ROI 交互主要是在设定状态下, runmode下只要普通显示即可
ROI显示逻辑

3 主要ROI显示函数函数

  1. 判断当前鼠标是否获取KeyPoint
  2. 鼠标move时,拖放ROI的姿态和大小
  3. 显示更新ROI
3.1 get_interactive_key_draw_point

获取当前ROI 关键点选中信息

/// <summary>
/// get_interactive_key_draw_point
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
private int get_interactive_key_draw_point(int x, int y)
{int point_index = 0;try{if (m_raw_mat != null && !m_raw_mat.IsDisposed){switch (m_ROIs[m_ROI_index].m_nType){case 0:// Rect1point_index = get_interactive_rect1_key_draw_point(ref m_ROIs[m_ROI_index], x, y);break;case 1:// Rect2point_index = get_interactive_rect2_key_draw_point(ref m_ROIs[m_ROI_index], x, y);break;case 2:// Circlepoint_index = get_interactive_circle_key_draw_point(ref m_ROIs[m_ROI_index], x, y);break;case 3:// Ellipspoint_index = get_interactive_ellips_key_draw_point(ref m_ROIs[m_ROI_index], x, y);break;case 4:// arcpoint_index = get_interactive_arc_key_draw_point(ref m_ROIs[m_ROI_index], x, y);break;case 5:// polypoint_index = get_interactive_poly_key_draw_point(ref m_ROIs[m_ROI_index], x, y);break;case 6://  point_index = get_interactive_point_key_draw_point(ref m_ROIs[m_ROI_index], x, y);break;case 7://  break;default:break;}}}catch (Exception ex){label_img_info.Text = ex.Message;point_index = -1;}return point_index;
}
3.2 drag_interactive_ROI

拖放当前ROI ,并且更新ROI

/// <summary>
/// drag_interactive_ROI
/// 更新drag之后的 ROI
/// </summary>
/// <param name="x_dist">distx in  ccs</param>
/// <param name="y_dist">disty in  ccs</param>
private void drag_interactive_ROI(float x_dist, float y_dist)
{List<float> temp_data = new List<float>();//step 0:  clear overlay// clear_ROIs(Black, 2);// step1: 重新计算rect1 try{if (m_raw_mat != null && !m_raw_mat.IsDisposed){switch (m_ROIs[m_ROI_index].m_nType){case 0:// Rect1drag_interactive_rect1(ref m_ROIs[m_ROI_index], x_dist, y_dist);break;case 1:// Rect2drag_interactive_rect2(ref m_ROIs[m_ROI_index], x_dist, y_dist);break;case 2:// Circledrag_interactive_circle(ref m_ROIs[m_ROI_index], x_dist, y_dist);break;case 3:// Ellipsdrag_interactive_ellipse(ref m_ROIs[m_ROI_index], x_dist, y_dist);break;case 4:// arcdrag_interactive_arc(ref m_ROIs[m_ROI_index], x_dist, y_dist);break;case 5:// polydrag_interactive_poly(ref m_ROIs[m_ROI_index], x_dist, y_dist);break;case 6:// drag_interactive_point(ref m_ROIs[m_ROI_index], x_dist, y_dist);break;case 7://  break;default:break;}}}catch (Exception ex){label_img_info.Text = "Drag InterActive ROI:" + ex.Message; }
}
3.3 显示更新ROI
 /// <summary>
/// Disp_InterActive_ROIs_quickflush_without_Update_Image
/// remark: drag  ROI 时使用,这是不需要更新 局部图片,只要更新 overlay 
/// </summary>
/// <param name="m_roi_s"></param>
/// <param name="colortype"></param>
/// <param name="thick"></param>
public void Disp_InterActive_ROIs_without_Update_Image(ROI[] m_roi_s, Scalar colortype, int thick)
{if (m_roi_s == null) return;ROI[] m_quick_rois = new ROI[5];ROI[] m_temp_rois = new ROI[5];Scalar linecolor = new Scalar(0, 0, 0);try{// lock (mutex_display){if (BD_OperateSet.MatisNotNull(m_extract_zoom_overlay)){m_ROIs = m_roi_s; DispManager.get_DispCTX().update_display_hom2d(ref hom2d_quick );m_quick_rois = BD_OperateSet.Affine_ROIs(m_roi_s, hom2d_quick);// step 0: disp ROIfor (int i = 0; i < m_quick_rois.Length; i++){if (i > 0) linecolor = MaskColor_Roi;else linecolor = colortype;if (m_quick_rois[0].m_fDatas.Count > 0){if (m_quick_rois[i].m_fDatas != null){//  b_overlay_zero = false;if (m_quick_rois[i].m_fDatas.Count > 0){switch (m_quick_rois[i].m_nType){case 0:// Rect0 if (m_ROI_index == i) disp_interactive_rect1_points_quickflush(m_quick_rois[i], linecolor, thick);else BD_OperateSet.Disp_Rect1(ref m_extract_zoom_overlay, m_quick_rois[i], linecolor, thick);break;case 1:// Rect2if (m_ROI_index == i) disp_interactive_rect2_points_quickflush(m_quick_rois[i], linecolor, thick);else BD_OperateSet.Disp_Rect2(ref m_extract_zoom_overlay, m_quick_rois[i], linecolor, thick);break;case 2:// Circleif (m_ROI_index == i) disp_interactive_circle_points_quickflush(m_quick_rois[i], linecolor, thick);else BD_OperateSet.Disp_Circle(ref m_extract_zoom_overlay, m_quick_rois[i], linecolor, thick);break;case 3:// Ellipsif (m_ROI_index == i) disp_interactive_ellips_points_quickflush(m_quick_rois[i], linecolor, thick);else BD_OperateSet.Disp_Ellipse(ref m_extract_zoom_overlay, m_quick_rois[i], linecolor, thick);break;case 4:// ARCif (m_ROI_index == i) disp_interactive_arc_points_quickflush(m_quick_rois[i], linecolor, thick);else BD_OperateSet.Disp_Arc(ref m_extract_zoom_overlay, m_quick_rois[i], linecolor, thick);break;case 5:// Polyif (m_ROI_index == i) disp_interactive_poly_points_quickflush(m_quick_rois[i], linecolor, thick);else BD_OperateSet.Disp_Polygen(ref m_extract_zoom_overlay, m_quick_rois[i], linecolor, thick);break;case 6:// if (m_ROI_index == i) disp_interactive_point_quickflush(m_quick_rois[m_ROI_index], linecolor, thick);else BD_OperateSet.Disp_Point(ref m_extract_zoom_overlay, m_quick_rois[m_ROI_index], linecolor, thick);break;case 7://  break;case 8://  break;default:break;}}}}}// step 1: disp masksupdate_Overlay_toDisplay(); pB_Display.Invalidate();// pB_Display.Update();}}}catch (Exception ex){label_img_info.Text = "Disp InterActive ROIs:" + ex.Message;     }
}

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

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

相关文章

怎么快速给他人分享图片?扫描二维码看图的简单做法

现在通过二维码来查看图片是一种很常见的方法&#xff0c;通过二维码来查看图片不仅能够减少对手机存储空间的占用&#xff0c;而且获取图片变得更加方便快捷&#xff0c;只需要扫码就能够查看图片&#xff0c;有利于图片的展现。很多的场景中都有图片二维码的应用&#xff0c;…

个人微信二次开发

​ 由于自身在机器人方面滚爬多年&#xff0c;现在收藏几个宝藏机器人 推荐一下自己常用的机器人&#xff1a; 适合有技术开发的公司&#xff0c;可以自主开发所需要的功能&#xff01;十分齐全 测试问文档&#xff1a;https://www.wkteam.cn/ 有需要的兄弟可以看一下&#…

音视频同步的关键:深入解析PTS和DTS

&#x1f60e; 作者介绍&#xff1a;我是程序员行者孙&#xff0c;一个热爱分享技术的制能工人。计算机本硕&#xff0c;人工制能研究生。公众号&#xff1a;AI Sun&#xff0c;视频号&#xff1a;AI-行者Sun &#x1f388; 本文专栏&#xff1a;本文收录于《音视频》系列专栏&…

STM32 ADC精度提升方法

STM32 ADC精度提升方法 Fang XS.1452512966qq.com如果有错误&#xff0c;希望被指出&#xff0c;学习技术的路难免会磕磕绊绊量的积累引起质的变化 硬件方法 优化布局布线&#xff0c;尽量减小其他干扰增加电源、Vref去耦电容使用低通滤波器&#xff0c;或加磁珠使用DCDC时尽…

vue+js实现鼠标右键页面时在鼠标位置出现弹窗

首先是弹窗元素 <div class"tanchuang move-win1"id"tanchuang1"><el-button>111</el-button></div>然后在需要弹窗的地方监听点击事件&#xff0c;可以将这个方法写在页面载入事件中 // 获取弹窗元素 var tanchuang document.…

lua中判断2个表是否相等

当我们获取 table 长度的时候无论是使用 # 还是 table.getn 其都会在索引中断的地方停止计数&#xff0c;而导致无法正确取得 table 的长度&#xff0c;而且还会出现奇怪的现象。例如&#xff1a;t里面有3个元素&#xff0c;但是因为最后一个下表是5和4&#xff0c;却表现出不一…

一篇文章搞懂时间复杂度和空间复杂度

不知道小伙伴们有没有刷过力扣上的算法题&#xff0c;我在上研究生的时候&#xff0c;刷过了前40道题&#xff0c;上面的算法题&#xff0c;我觉得还挺难的&#xff0c;当你写完代码的时候&#xff0c;就可以提交自己写的代码到系统上&#xff0c;系统会给你写的代码计算时间复…

页面速度是如何影响SEO的?

搜索引擎使用复杂的算法来衡量您网站的重要方面&#xff0c;以决定是否向您发送流量。 搜索引擎使用您网站的小元素来确定您网站的质量和真实性&#xff0c;然后此操作将转化为您的网页在搜索引擎结果页面 中出现的位置。提高您在 SERP 中的排名的过程称为搜索引擎优化 (SEO)。…

第57期|GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

Datawhale - 角色要素提取竞赛

文章目录 赛题要求一、赛事背景二、赛事任务三、评审规则1.平台说明2.数据说明3.评估指标4.评测及排行 四、作品提交要求五、 运行BaselineStep1&#xff1a;下载相关库Step2&#xff1a;配置导入Step3&#xff1a;模型测试Step4&#xff1a;数据读取Step5&#xff1a;Prompt设…

Yi-1.5 9B Chat 上线Amazon SageMaker JumpStart

你是否对简单的API调用大模型感到不满足&#xff1f;是否因为无法亲自部署属于自己的大模型而烦恼&#xff1f; 好消息来了&#xff0c;Amazon SageMaker JumpStart 初体验 CloudLab实验上线啦&#xff01; 本实验将以零一万物最新发布的中文基础模型 Yi-1.5 9B Chat 为例&am…

kettle从入门到精通 第七十四课 ETL之kettle kettle调用https接口教程,忽略SSL校验

场景&#xff1a;kettle调用https接口&#xff0c;跳过校验SSL。&#xff08;有些公司内部系统之间的https的接口是没有SSL校验这一说&#xff0c;无需使用用证书的&#xff09; 解决方案&#xff1a;自定义插件或者自定义jar包通过javascript调用https接口。 1、http post 步…

嵌入式UI开发-lvgl+wsl2+vscode系列:8、控件(Widgets)(一)

一、前言 这里将介绍一系列控件&#xff0c;了解后就可以开始基础的开发了。 二、示例 1、Base Obj&#xff08;基础对象&#xff09; 1.1、示例1 #include "../../lv_examples.h" #if LV_BUILD_EXAMPLESvoid lv_example_obj_1(void) {lv_obj_t * obj1;obj1 lv…

Python容器 之 列表--列表的常用操作方法

1.查询相关方法&#xff1a;index()、count() &#xff08;1&#xff09;index() 说明&#xff1a; 和 字符串中的 find() 的作用是一样 列表中是没有 find() 方法的, 只有 index() 方法&#xff1b;字符串中 同时存在 find() 和 index() 方法 格式&#xff1a;列表.index(要查…

你必须要知道的自闭症知识,推荐收藏

自闭症&#xff0c;一种日益受到关注的神经发育障碍&#xff0c;对于许多人来说&#xff0c;仍充满了神秘和误解。以下是 12 个你必须知道的关于自闭症的重要知识点&#xff1a; 1、自闭症并非心理问题 自闭症是一种生理上的神经发育障碍&#xff0c;不是由于孩…

亚马逊TM商标跟卖,同行截流采集,人工手动跟卖选品更方便!

区分TM标&#xff0c;软件自动查询&#xff0c;人工手动查询方便。 大家好&#xff0c;跟大家说下如何区分TM标。 选择相对于的站点&#xff0c;选择TM。 软件采集出来的已备案、未备案TMR标&#xff0c;现在点击TM标就会跳到美国商标局。 可以清晰的看到这个地方只有一个序…

张颂文百花提名,男配界笑出“颂”彩

在这个星光熠熠的百花奖舞台上&#xff0c; 张颂文老师犹如一坛陈年老酒&#xff0c;越品越有味&#xff0c; 竟不声不响地提名了最佳男配角&#xff01;这下可好&#xff0c; 男配界仿佛一夜之间被“颂”风吹得花枝乱颤&#xff0c;笑料百出。你说张颂文老师这演技&#xf…

DreamTech联合南大和牛津发布最强3D内容生成大模型——Direct3D

文章链接&#xff1a;https://arxiv.org/pdf/2405.14832 github链接&#xff1a;https://nju-3dv.github.io/projects/Direct3D/ 从文本和图像生成高质量的3D资产一直是一项挑战&#xff0c;主要是由于缺乏能够捕捉复杂几何分布的可扩展3D表示。在这项工作中&#xff0c;介绍…

详解反向传播(BP)算法

文章目录 what&#xff08;是什么&#xff09;where&#xff08;用在哪&#xff09;How&#xff08;原理&&怎么用&#xff09;原理以及推导过程pytorch中的反向传播 what&#xff08;是什么&#xff09; 反向传播算法&#xff08;Backpropagation&#xff09;是一种用于…

自动驾驶水泥搅拌车在梁场的应用(下)

自动驾驶水泥搅拌车在梁场的应用&#xff08;下&#xff09; 北京渡众机器人科技有限公司的自动驾驶水泥搅拌车在梁场&#xff08;也称为预制梁场&#xff09;的应用可以带来多方面的优势和效益&#xff1a; 1. 自动化搅拌和运输 在梁场中&#xff0c;通常需要大量的混凝土搅…