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

news2024/12/25 1:11:12

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:// Rect1
                    point_index = get_interactive_rect1_key_draw_point(ref m_ROIs[m_ROI_index], x, y);
                    break;
                case 1:// Rect2
                    point_index = get_interactive_rect2_key_draw_point(ref m_ROIs[m_ROI_index], x, y);
                    break;
                case 2:// Circle
                    point_index = get_interactive_circle_key_draw_point(ref m_ROIs[m_ROI_index], x, y);
                    break;
                case 3:// Ellips
                    point_index = get_interactive_ellips_key_draw_point(ref m_ROIs[m_ROI_index], x, y);
                    break;
                case 4:// arc
                    point_index = get_interactive_arc_key_draw_point(ref m_ROIs[m_ROI_index], x, y);
                    break;
                case 5:// poly
                    point_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:// Rect1
                  drag_interactive_rect1(ref m_ROIs[m_ROI_index], x_dist, y_dist);
                  break;
              case 1:// Rect2
                  drag_interactive_rect2(ref m_ROIs[m_ROI_index], x_dist, y_dist);
                  break;
              case 2:// Circle
                  drag_interactive_circle(ref m_ROIs[m_ROI_index], x_dist, y_dist);
                  break;
              case 3:// Ellips
                  drag_interactive_ellipse(ref m_ROIs[m_ROI_index], x_dist, y_dist);
                  break;
              case 4:// arc
                  drag_interactive_arc(ref m_ROIs[m_ROI_index], x_dist, y_dist);
                  break;
              case 5:// poly
                  drag_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 ROI
              for (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:// Rect2
                                      if (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:// Circle
                                      if (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:// Ellips
                                      if (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:// ARC
                                      if (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:// Poly
                                      if (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 masks
              update_Overlay_toDisplay(); 
              pB_Display.Invalidate();// pB_Display.Update();
          }
      }
  }
  catch (Exception ex)
  {
      label_img_info.Text = "Disp InterActive ROIs:" + ex.Message;     
  }
}

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

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

相关文章

20240702在vmware17.5虚拟机中让ubuntu22.04使用主机的代理上网

20240702在vmware17.5虚拟机中让ubuntu22.04使用主机的代理上网 2024/7/2 14:41 百度&#xff1a;vmware 虚拟机 使用主机代理 上网 https://blog.csdn.net/nomoremorphine/article/details/138738065?utm_mediumdistribute.pc_relevant.none-task-blog-2~default~baidujs_ba…

周下载量20万的npm包---store

https://www.npmjs.com/package/store <script setup> import { onMounted } from vue import store from storeonMounted(() > {store.set(user, { name: xutongbao })let user store.get(user)console.log(user) //对象console.log(localStorage.getItem(user)) //…

[SIEMENS/S7-300] 接线图分析

SIEMENS-S7-300 系列 接线图 (整体) (PLC) 操作员面板 (操作员控制面板) (24v在第11页面第九栏,12页面第一栏。PE在17页第九栏) 跟进地址,到24V电源适配器 操作面板来自X4.0端子块,并且带有WC4.0标签的电缆。 PLC 操作面板与PLC之间通信使用Profibus电缆,直接通过CPU的MPI端…

Kotlin中的数据类型

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

OBS 26.1.1 64-bit (win10)

OBS 26.1.1 64-bit &#xff08;win10&#xff09;采集窗口问题 出现采集界面错误 点击【属性】 修改【采集方式】 完美解决

Vue3 sortablejs 表格拖拽后,表格无法更新的问题处理

实用sortablejs在vue项目中实现表格行拖拽排序 你可能会发现&#xff0c;表格排序是可以实现&#xff0c;但是我们基于数据驱动的vue中关联的数据并没有发生变化&#xff0c; 如果你的表格带有列固定(固定列实际上在dom中有两个表格&#xff0c;其中固定的列在一个表格中&…

深入理解C++中的锁

目录 1.基本互斥锁&#xff08;std::mutex&#xff09; 2.递归互斥锁&#xff08;std::recursive_mutex&#xff09; 3.带超时机制的互斥锁&#xff08;std::timed_mutex&#xff09; 4.带超时机制的递归互斥锁&#xff08;std::recursive_timed_mutex&#xff09; 5.共享…

2.2.4 C#中显示控件BDPictureBox 的实现----ROI交互

2.2.4 C#中显示控件BDPictureBox 的实现----ROI交互 1 界面效果 在设定模式下&#xff0c;可以进行ROI 框的拖动&#xff0c;这里以Rect1举例说明 2 增加ROI类定义 /// <summary> /// ROI_single /// 用于描述图片感兴趣区域 /// type: 0:Rect1;1:Rect2;2:Circle ;3:…

压缩pdf文件大小,压缩pdf文件大小软件哪个好

在数字化时代&#xff0c;PDF文件因其卓越的跨平台兼容性和稳定性而成为工作与学习的好帮手。然而&#xff0c;当PDF文件体积过大时&#xff0c;传输和存储便成了一项挑战。别担心&#xff0c;本文将为你揭秘如何快速压缩PDF文件&#xff0c;让你的文档轻装上路&#xff01; 压…

【Python实战因果推断】14_线性回归的不合理效果4

目录 Debiasing Step Denoising Step Standard Error of the Regression Estimator Debiasing Step 回想一下&#xff0c;最初由于混杂偏差&#xff0c;您的数据看起来是这样的、 随着信贷额度的增加&#xff0c;违约率呈下降趋势&#xff1a; 根据 FWL 定理&#xff0c;您可…

力扣习题--哈沙德数

一、前言 本系列主要讲解和分析力扣习题&#xff0c;所以的习题均来自于力扣官网题库 - 力扣 (LeetCode) 全球极客挚爱的技术成长平台 二、哈沙德数 1. 哈沙德数 如果一个整数能够被其各个数位上的数字之和整除&#xff0c;则称之为 哈沙德数&#xff08;Harshad number&…

JAVA学习笔记-JAVA基础语法-DAY21-缓冲流、转换流、序列化流

第一章 缓冲流 昨天学习了基本的一些流&#xff0c;作为IO流的入门&#xff0c;今天我们要见识一些更强大的流。比如能够高效读写的缓冲流&#xff0c;能够转换编码的转换流&#xff0c;能够持久化存储对象的序列化流等等。这些功能更为强大的流&#xff0c;都是在基本的流对象…

【echarts】拖拽滑块dataZoom-slider自定义样式,简单适配移动端

电脑端 移动端 代码片段 dataZoom: [{type: inside,start: 0,end: 100},{type: slider,backgroundColor: #F2F5F9,fillerColor: #BFCCE3,height: 13, // 设置slider的高度为15start: 0,end: 100,right: 60,left: 60,bottom: 15,handleIcon:path://M30.9,53.2C16.8,53.2,5.3,41.…

【Git 学习笔记】1.3 Git 的三个阶段

1.3 Git 的三个阶段 由于远程代码库后续存在新的提交&#xff0c;因此实操过程中的结果与书中并不完全一致。根据书中 HEAD 指向的 SHA-1&#xff1a;34acc370b4d6ae53f051255680feaefaf7f7850d&#xff0c;可通过以下命令切换到对应版本&#xff0c;并新建一个 newdemo 分支来…

基于LSTM、GRU和RNN的交通时间序列预测(Python)

近年来&#xff0c;人工智能技术的发展推动了智慧交通领域的进步&#xff0c;交通流预测日益成为研究热点之一。交通流预测是基于历史的交通数据对未来时段的交通流状态参数进行预测。作为交通流状态的直接反映&#xff0c;交通流参数的预测结果可以直接应用于 ATIS 和ATMS 中&…

QT Designer中的qrc文件如何创建,将图片添加进qrc文件

创建qrc文件可以在qt中给空间添加个性化属性 一、创建qrc文件的方式 1、将以下代码复制到txt文件文件中 <!DOCTYPE RCC> <RCC version"1.0"> <qresource prefix"/"><file>background_img.png</file><file>backgrou…

第二证券:可转债基础知识?想玩可转债一定要搞懂的交易规则!

可转债&#xff0c;全称是“可转化公司债券”&#xff0c;是上市公司为了融资&#xff0c;向社会公众所发行的一种债券&#xff0c;具有股票和债券的双重特点&#xff0c;投资者可以选择按照发行时约定的价格将债券转化成公司一般股票&#xff0c;也可作为债券持有到期后收取本…

计算机网络网络层复习题1

一. 单选题&#xff08;共27题&#xff09; 1. (单选题)以太网 MAC 地址、IPv4 地址、IPv6 地址的地址空间大小分别是&#xff08; &#xff09;。 A. 2^48&#xff0c;2^32&#xff0c;2^128B. 2^32&#xff0c;2^32&#xff0c;2^96C. 2^16&#xff0c;2^56&#xff0c;2^6…

【51单片机入门】矩阵键盘

文章目录 前言矩阵键盘介绍与检测原理原理图代码讲解总结 前言 在嵌入式系统设计中&#xff0c;键盘输入是一种常见的人机交互方式。其中&#xff0c;矩阵键盘因其简单、方便和易于扩展的特性&#xff0c;被广泛应用于各种设备中。本文将介绍如何使用51单片机来实现矩阵键盘的…

修改Springboot项目名称

修改Springboot项目名称 1. 整体描述2. 具体步骤2.1 修改module名称2.2 修改程序包名2.3 mybatis/mybatis-plus配置修改2.4 logback文件2.5 yml配置2.6 Application启动类2.7 其他 3. 总结 1. 整体描述 开发过程中&#xff0c;经常遇到新来个项目&#xff0c;需要一份初始代码…