C#Halcon交互绘制ROI

画圆

确定后效果

矩形2

矩形1

画线

用简单的方式初步实现ROI交互绘制,方便初学者熟悉原理

UI界面

UI代码

复制代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ViewControl;
using HalconDotNet;
using System.Reflection.Emit;
using static System.Net.Mime.MediaTypeNames;
namespace DeepLearningTest1
{
    public partial class Form1 : Form
    {
        HalconView HW;
        HObject HIMage = new HObject();
        public Form1()
        {
            InitializeComponent();
            HW = new HalconView();
            HW.HWindowControl.BackColor = Color.White;
            splitContainer1.Panel1.Controls.Add(HW);
            HW.Dock = DockStyle.Fill;
        }       
        /// <summary>
        /// 加载图像
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                OpenFileDialog openFileDialog = new OpenFileDialog();
                openFileDialog.Filter = "图片文件(*.bmp;*.jpg;*.gif;*.png;*.tiff;*.tif)|*.bmp;*.jpg;*.gif;*.png;*.tiff;*.tif";
                openFileDialog.RestoreDirectory = true;
                openFileDialog.FilterIndex = 1;
                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    label3.Text = openFileDialog.FileName;
                    HOperatorSet.ReadImage(out HIMage, label3.Text);
                    
                    HW.DispImage(HIMage, true);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("加载图片失败  " + ex.ToString());
            }
        }
        /// <summary>
        /// 画圆
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DrawCircle(object sender, EventArgs e)
        {
            try
            {
                if (!HIMage.IsInitialized()) { MessageBox.Show("图片为空"); return; }
                HSystem.SetSystem("clip_region", "false");
                HW.Focus();
                HW.DrawCircleMod(out HObject Circle11,  2000,  2000,  100, out HTuple r1, out HTuple c1, out HTuple ra);
                HW.HalconWindow.SetColor("yellow");
                HW.DispObject(Circle11);
            }
            catch (Exception ex)
            {
                MessageBox.Show("设置区域失败  " + ex.ToString());
            }
        }
        /// <summary>
        /// 画线
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DrawLine(object sender, EventArgs e)
        {
            try
            {
                if (!HIMage.IsInitialized()) { MessageBox.Show("图片为空"); return; }
                HSystem.SetSystem("clip_region", "false");
                HW.Focus();
                HW.DrawLineMod(out HObject Line, 2000, 20, 2000,2000, out HTuple r1, out HTuple c1, out HTuple r2, out HTuple c2);
                HW.HalconWindow.SetColor("green");
                HW.DispObject(Line);
            }
            catch (Exception ex)
            {
                MessageBox.Show("设置区域失败  " + ex.ToString());
            }
        }
        /// <summary>
        /// 画矩形1
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DrawRectangle(object sender, EventArgs e)
        {
            try
            {
                if (!HIMage.IsInitialized()) { MessageBox.Show("图片为空"); return; }
                HSystem.SetSystem("clip_region", "false");
                HW.Focus();
                HW.DrawRectangle1Mod(out HObject Rectangle, 200, 200, 2000, 2000, out HTuple r1, out HTuple c1, out HTuple r2, out HTuple c2);
                HW.HalconWindow.SetColor("spring green");
                HW.DispObject(Rectangle);
            }
            catch (Exception ex)
            {
                MessageBox.Show("设置区域失败  " + ex.ToString());
            }
        }
        /// <summary>
        /// 画矩形2
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DrawRectangle2(object sender, EventArgs e)
        {
            try
            {
                if (!HIMage.IsInitialized()) { MessageBox.Show("图片为空"); return; }
                HSystem.SetSystem("clip_region", "false");
                HW.Focus();
                HW.DrawRectangle2Mod(out HObject Rectangle2,2000,2000,0,200,100, out HTuple r1, out HTuple c1, out HTuple phi, out HTuple l1, out HTuple l2);
                HW.HalconWindow.SetColor("blue");
                HW.DispObject(Rectangle2);
            }
            catch (Exception ex)
            {
                MessageBox.Show("设置区域失败  " + ex.ToString());
            }
        }
        /// <summary>
        /// 绘制ROI
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_DrawROI_Click(object sender, EventArgs e)
        {
            if (comboBox1.Text == "画圆")
            {
                DrawCircle(null, null);
            }
            if (comboBox1.Text == "画线")
            {
                DrawLine(null, null);
            }
            if (comboBox1.Text == "矩形1")
            {
                DrawRectangle(null, null);
            }
            if (comboBox1.Text == "矩形2")
            {
                DrawRectangle2(null, null);
            }
        }
        /// <summary>
        /// 清空界面
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnClear_Click(object sender, EventArgs e)
        {
            try
            {
                if (!HIMage.IsInitialized()) { MessageBox.Show("图片为空"); return; }
                HW.HalconWindow.ClearWindow();
                HW.DispObject(HIMage);
            }
            catch (Exception ex)
            {
            }
        }
    }
}
相关推荐
赔罪30 分钟前
C与C++的区别
c语言·开发语言·c++
薯条不要番茄酱2 小时前
【网络编程】从零开始彻底了解网络编程(三)
开发语言·网络·php
weixin_307779132 小时前
实现Azure Synapse Analytics安全地请求企业内部API返回数据
开发语言·python·云计算·azure
白熊1883 小时前
【计算机视觉】CV实战项目- COVID 社交距离检测(covid-social-distancing-detection)
人工智能·opencv·计算机视觉
zru_96026 小时前
Java 中常用队列用法详解
java·开发语言
keep intensify7 小时前
杨氏矩阵、字符串旋转、交换奇偶位,offsetof宏
c语言·开发语言·数据结构·算法·矩阵
enyp807 小时前
c++ 类和动态内存分配
java·开发语言·c++
春天里的小帆船7 小时前
4.20刷题记录(单调栈)
开发语言·数据结构
hy____1237 小时前
string类(详解)
开发语言·c++
pink大呲花7 小时前
使用 Axios 进行 API 请求与接口封装:打造高效稳定的前端数据交互
前端·vue.js·交互