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();
}
}
}