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)
            {
            }
        }
    }
}
相关推荐
土豆儿@11 分钟前
java之泛型
java·开发语言
DCcsdnDC21 分钟前
Airsim仿真双目相机时间戳不同步的解决办法
计算机视觉
小伍_Five24 分钟前
从0开始:OpenCV入门教程【图像处理基础】
图像处理·python·opencv
m0_7482453436 分钟前
python——Django 框架
开发语言·python·django
曼巴UE541 分钟前
UE5.3 C++ TArray系列(一)
开发语言·c++·ue5
熬夜苦读学习1 小时前
Linux文件系统
linux·运维·服务器·开发语言·后端
菜鸟一枚在这1 小时前
深度解析建造者模式:复杂对象构建的优雅之道
java·开发语言·算法
阿巴~阿巴~1 小时前
多源 BFS 算法详解:从原理到实现,高效解决多源最短路问题
开发语言·数据结构·c++·算法·宽度优先
奔跑吧邓邓子3 小时前
【Python爬虫(34)】Python多进程编程:开启高效并行世界的钥匙
开发语言·爬虫·python·多进程
pchmi3 小时前
CNN常用卷积核
深度学习·神经网络·机器学习·cnn·c#