c# + halcon编程(读图、显示图、处理图、鼠标和图像交互)

4 篇文章 3 订阅

1.halcon编写测试号算法代码部分后导出c#文件。

2.vs种引用halcon安装目录下的halcondonet,工具箱中可添加控件HWindowControl。

2.代码示例

using System;
using System.Theading.Tasks;
using System.Windows.Forms;
using HalconDotNet;

namespace WindowApp
{
    public partial class Form1: From
    {
        HTuple WindowsID, ImageWidth;
        private double RowDown; // 鼠标按下时的行坐标
        private double ColDown; // 鼠标按下时的列坐标
        HObject ho_Image;
        
        public Form1()
        {
            InitializeComponent();
            CreateHalonWindow();
        }
        
        private void hWindowControl1_HMouseWheel(obejct sender, HMouseEventArgs e)
        {
            HTuple Zoom, Row, Col, Button;
            HTuple Row0, Column0, Row00, Column00, Ht, Wt, r1, c1, r2, c2;
            if(e.Delta > 0)
            {
                Zoom = 1.5;
            }
            else
            {
                Zoom = 0.5;
            }
            
            HOperatorSet.GetMposition(WindowID, out Row, out Col, out Button);
            HOperatorSet.GetPart(WindowID, out Row0, out Column0, out Row00, out         
             Column00);
            Ht = Row00 - Row0;
            Wt = Column00 - Column0;
            if(Ht * Wt < 3200 * 3200 || Zoom == 1.5)
            {
                r1 = (Row0 + ((1 - (1.0 / Zoom)) * (Row - Row0)));
                c1 = (Column0 + ((1 - (1.0 / Zoom)) * (Col- Column0)));
                r2 = r1 + (Ht / Zoom);
                c2 = c1 + (Wt / Zoom);
                HOperatorSet.SetPart(WindowID, r1, c1, r2, c2);
                HOperatorSet.ClearWindow(WindowID);
                HOperatorSet.DispObj(ho_Image, WindowID);
            }

        }

        private void hWIndowControl1_HMouseDown(object sender, HMouseEventArgs e)
        {
            HTuple Row,Column,Button;
            HOperatorSet.GetMposition(WindowID, out Row, out Column, out Button);
            RowDown = ROw;
            ColDown = Column;
        }

        private void hWindowControl1_HMouseUp(object sender, HMouseEventArgs e)
        {
            HTuple row1, col1, row2, col2, Row, Column, Button;
            HOperatorSet.GetMposition(WindowID, out Row, out Column, out Button);
            double RowMove = Row - RowDown;
            double ColMove = Column - ColDown;
            HOperatorSet.GetPart(WindowID, out row1, out col1, out row2, out col2);
            HOperatorSet.GetPart(WindowID, row1 - RowMove, col1 - ColMove, row2 -         
                 RowMove, col2 - ColMove);
            HOperatorSet.ClearWindow(WidnowID);
            if(ImageHeight != null)
            {
                HOperatorSet.DispObj(ho_Image, WindowID);    
            }
            else
            {
                MessageBox.Show("请加载一张图片");
            }
        }

        private void hWindowControl1_HMouseMove(object sender, HMouseEventArgs e)
        {
            HTuple Row,Column,Button,pointGray;
            HOperatorSet.GetMposition(WindowID, out Row, out Column, out Button);
            if(ImageHeight != null && (Row > 0 && Row < ImageHeight) && (Column > 0 &&     
                 Column < ImageWidth))
            {
                HOperator.GetGrayVal(ho_Image, Row, Column, out pointGray);
            }
            else
            {
                pointGray = "_";
            }
            String str = String.Format("Row:{0} Column:{1} Gray:{2}",Row, Column,     
             pointGray);
            label.Text = str;
        }

        private void hWindowControl1_HMouseDBClick(object sender, HMouseEvectArgs e)
        {
            HOperatorSet.SetPart(WindowID, 0, 0, ImageHeight-1, ImageWidth-1);
            HOperatorSet.ClearWidnow(WindowID);
            HOperatorSet.DispObj(ho_Image, WidnowID);
        }

        public void CreateHalconWindow()
        {
            WindowID = hWindowControl1.HalconWindow;
        }

        priate void button1_Click(object sender, EventArgs e)
        {
            // HDevelopExport hd = new HDevelopExport();
            // hd.RunHalcon(WindowID);

            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "所有图像文件 | *.bmp; *.jpg; *.png; *.tif; *.ico";
            if(dlg.ShowDoalog() == DialogResult.OK)
            {
                HTuple ImagePath = dlg.FileName;
                HOperator.ReadImage(out ho_Image, ImagePath);
            }
            HOperatorSet.GetImageSize(ho_Image, out ImageWidth, out ImageHeight);
            HOperatorSet.SetPart(WindowID, 0, 0, ImageWidth, ImageHeight);
            HoperatorSet.DispObj(ho_Image, WindowID);
        }
    }

    public partial class HDevelopExport : Object
    {
        public HTuple hv_ExpDefaultWinHandle;
        public HDevelopExport()
        {
            initHalcon();
        }

        private void action()
        {
            HObject ho_Image, ho_GrayImage;
            HTuple hv_Width = null, hv_Height = null;
            
            HoperatorSet.GenEmptyObj(out ho_Image);
            HoperatorSet.GenEmptyObj(out ho_GrayImage);
            ho_Image.Dispose();
            ho_GrayImage.Dispose();

            HoperatorSet.ReadImage(out ho_Image, "D:/1.jpg");
            HoperatorSet.Rgb1ToGray(ho_Image, out ho_GrayImage);
            HoperatorSet.GetImageSize(ho_GrayImage, out hv_Width, out hv_Height);
            HOperatorSet.DispObj(ho_GrayImage, hv_ExpDefaultWinHandle);
            ho_Image.Dispose();
            ho_GrayImage.Dispose();

            HoperatorSet.ClearObj(ho_Image);

            hv_Width = null;
            hv_Height = null;
        }

        public void initHalcon()
        {
            HOperatorSet.SetSystem("width", 512);
            HOperatorSet.SetSystem("height", 512);
        }

        public void RunHalcon(HTuple Window)
        {
            hv_ExpDefaultWinHandle = Window;
            action();
        }
    }
}

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值