Haclon +c# 实时图像显示 您所在的位置:网站首页 TupleConcat Haclon +c# 实时图像显示

Haclon +c# 实时图像显示

#Haclon +c# 实时图像显示| 来源: 网络整理| 查看: 265

首先第一步用Haclon软件写好实时采集代码:

* Image Acquisition 01: Code generated by Image Acquisition 01 open_framegrabber ('GigEVision2', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', '000f314ccf51_AlliedVisionTechnologies_Manta_G125BE0020002', 0, -1, AcqHandle) *打开相机对待侧物体进行测量 grab_image_start (AcqHandle, -1) while(true) grab_image_async (Image, AcqHandle, -1) get_image_size (Image, Width, Height) dev_set_part (0, 0, Height, Width) endwhile close_framegrabber (AcqHandle)

然后打开文件菜单栏选择到处语言导出C# xxx.CS文件,

导出C#代码:

using HalconDotNet; public partial class HDevelopExport { #if !(NO_EXPORT_MAIN || NO_EXPORT_APP_MAIN) public HDevelopExport() { // Default settings used in HDevelop HOperatorSet.SetSystem("width", 512); HOperatorSet.SetSystem("height", 512); if (HalconAPI.isWindows) HOperatorSet.SetSystem("use_window_thread","true"); action(); } #endif // Procedures // Chapter: Graphics / Text // Short Description: This procedure writes one or multiple text messages. public void disp_message (HTuple hv_WindowHandle, HTuple hv_String, HTuple hv_CoordSystem, HTuple hv_Row, HTuple hv_Column, HTuple hv_Color, HTuple hv_Box) { HTuple hv_GenParamName = new HTuple(), hv_GenParamValue = new HTuple(); HTuple hv_Color_COPY_INP_TMP = new HTuple(hv_Color); HTuple hv_Column_COPY_INP_TMP = new HTuple(hv_Column); HTuple hv_CoordSystem_COPY_INP_TMP = new HTuple(hv_CoordSystem); HTuple hv_Row_COPY_INP_TMP = new HTuple(hv_Row); //Convert the parameters for disp_text. if ((int)((new HTuple(hv_Row_COPY_INP_TMP.TupleEqual(new HTuple()))).TupleOr( new HTuple(hv_Column_COPY_INP_TMP.TupleEqual(new HTuple())))) != 0) { hv_Color_COPY_INP_TMP.Dispose(); hv_Column_COPY_INP_TMP.Dispose(); hv_CoordSystem_COPY_INP_TMP.Dispose(); hv_Row_COPY_INP_TMP.Dispose(); hv_GenParamName.Dispose(); hv_GenParamValue.Dispose(); return; } if ((int)(new HTuple(hv_Row_COPY_INP_TMP.TupleEqual(-1))) != 0) { hv_Row_COPY_INP_TMP.Dispose(); hv_Row_COPY_INP_TMP = 12; } if ((int)(new HTuple(hv_Column_COPY_INP_TMP.TupleEqual(-1))) != 0) { hv_Column_COPY_INP_TMP.Dispose(); hv_Column_COPY_INP_TMP = 12; } // //Convert the parameter Box to generic parameters. hv_GenParamName.Dispose(); hv_GenParamName = new HTuple(); hv_GenParamValue.Dispose(); hv_GenParamValue = new HTuple(); if ((int)(new HTuple((new HTuple(hv_Box.TupleLength())).TupleGreater(0))) != 0) { if ((int)(new HTuple(((hv_Box.TupleSelect(0))).TupleEqual("false"))) != 0) { //Display no box using (HDevDisposeHelper dh = new HDevDisposeHelper()) { { HTuple ExpTmpLocalVar_GenParamName = hv_GenParamName.TupleConcat( "box"); hv_GenParamName.Dispose(); hv_GenParamName = ExpTmpLocalVar_GenParamName; } } using (HDevDisposeHelper dh = new HDevDisposeHelper()) { { HTuple ExpTmpLocalVar_GenParamValue = hv_GenParamValue.TupleConcat( "false"); hv_GenParamValue.Dispose(); hv_GenParamValue = ExpTmpLocalVar_GenParamValue; } } } else if ((int)(new HTuple(((hv_Box.TupleSelect(0))).TupleNotEqual("true"))) != 0) { //Set a color other than the default. using (HDevDisposeHelper dh = new HDevDisposeHelper()) { { HTuple ExpTmpLocalVar_GenParamName = hv_GenParamName.TupleConcat( "box_color"); hv_GenParamName.Dispose(); hv_GenParamName = ExpTmpLocalVar_GenParamName; } } using (HDevDisposeHelper dh = new HDevDisposeHelper()) { { HTuple ExpTmpLocalVar_GenParamValue = hv_GenParamValue.TupleConcat( hv_Box.TupleSelect(0)); hv_GenParamValue.Dispose(); hv_GenParamValue = ExpTmpLocalVar_GenParamValue; } } } } if ((int)(new HTuple((new HTuple(hv_Box.TupleLength())).TupleGreater(1))) != 0) { if ((int)(new HTuple(((hv_Box.TupleSelect(1))).TupleEqual("false"))) != 0) { //Display no shadow. using (HDevDisposeHelper dh = new HDevDisposeHelper()) { { HTuple ExpTmpLocalVar_GenParamName = hv_GenParamName.TupleConcat( "shadow"); hv_GenParamName.Dispose(); hv_GenParamName = ExpTmpLocalVar_GenParamName; } } using (HDevDisposeHelper dh = new HDevDisposeHelper()) { { HTuple ExpTmpLocalVar_GenParamValue = hv_GenParamValue.TupleConcat( "false"); hv_GenParamValue.Dispose(); hv_GenParamValue = ExpTmpLocalVar_GenParamValue; } } } else if ((int)(new HTuple(((hv_Box.TupleSelect(1))).TupleNotEqual("true"))) != 0) { //Set a shadow color other than the default. using (HDevDisposeHelper dh = new HDevDisposeHelper()) { { HTuple ExpTmpLocalVar_GenParamName = hv_GenParamName.TupleConcat( "shadow_color"); hv_GenParamName.Dispose(); hv_GenParamName = ExpTmpLocalVar_GenParamName; } } using (HDevDisposeHelper dh = new HDevDisposeHelper()) { { HTuple ExpTmpLocalVar_GenParamValue = hv_GenParamValue.TupleConcat( hv_Box.TupleSelect(1)); hv_GenParamValue.Dispose(); hv_GenParamValue = ExpTmpLocalVar_GenParamValue; } } } } //Restore default CoordSystem behavior. if ((int)(new HTuple(hv_CoordSystem_COPY_INP_TMP.TupleNotEqual("window"))) != 0) { hv_CoordSystem_COPY_INP_TMP.Dispose(); hv_CoordSystem_COPY_INP_TMP = "image"; } // if ((int)(new HTuple(hv_Color_COPY_INP_TMP.TupleEqual(""))) != 0) { //disp_text does not accept an empty string for Color. hv_Color_COPY_INP_TMP.Dispose(); hv_Color_COPY_INP_TMP = new HTuple(); } // HOperatorSet.DispText(hv_WindowHandle, hv_String, hv_CoordSystem_COPY_INP_TMP, hv_Row_COPY_INP_TMP, hv_Column_COPY_INP_TMP, hv_Color_COPY_INP_TMP, hv_GenParamName, hv_GenParamValue); hv_Color_COPY_INP_TMP.Dispose(); hv_Column_COPY_INP_TMP.Dispose(); hv_CoordSystem_COPY_INP_TMP.Dispose(); hv_Row_COPY_INP_TMP.Dispose(); hv_GenParamName.Dispose(); hv_GenParamValue.Dispose(); return; } #if !NO_EXPORT_MAIN // Main procedure private void action() { // Local iconic variables HObject ho_Image, ho_Regions, ho_ConnectedRegions; HObject ho_SelectedRegions, ho_RegionFillUp, ho_Contours1; // Local control variables HTuple hv_CameraParameters = new HTuple(); HTuple hv_CameraPose = new HTuple(), hv_X = new HTuple(); HTuple hv_Y = new HTuple(), hv_AcqHandle = new HTuple(); HTuple hv_Width = new HTuple(), hv_Height = new HTuple(); HTuple hv_WindowID = new HTuple(), hv_Row2 = new HTuple(); HTuple hv_Column2 = new HTuple(), hv_Radius1 = new HTuple(); HTuple hv_StartPhi1 = new HTuple(), hv_EndPhi1 = new HTuple(); HTuple hv_PointOrder1 = new HTuple(), hv_RealDiameter = new HTuple(); // Initialize local and output iconic variables HOperatorSet.GenEmptyObj(out ho_Image); HOperatorSet.GenEmptyObj(out ho_Regions); HOperatorSet.GenEmptyObj(out ho_ConnectedRegions); HOperatorSet.GenEmptyObj(out ho_SelectedRegions); HOperatorSet.GenEmptyObj(out ho_RegionFillUp); HOperatorSet.GenEmptyObj(out ho_Contours1); //标定得到的相机参数 hv_CameraParameters.Dispose(); hv_CameraParameters = new HTuple(); hv_CameraParameters[0] = 0.189115; hv_CameraParameters[1] = 87.4045; hv_CameraParameters[2] = 2.21885e-006; hv_CameraParameters[3] = 2.2e-006; hv_CameraParameters[4] = 2700.85; hv_CameraParameters[5] = -118.133; hv_CameraParameters[6] = 2592; hv_CameraParameters[7] = 1944; //相机在世界坐标系中的位姿 hv_CameraPose.Dispose(); hv_CameraPose = new HTuple(); hv_CameraPose[0] = -0.344824; hv_CameraPose[1] = 0.0149449; hv_CameraPose[2] = 10.9193; hv_CameraPose[3] = 0.721803; hv_CameraPose[4] = 4.27061; hv_CameraPose[5] = 0.733757; hv_CameraPose[6] = 0; hv_X.Dispose();hv_Y.Dispose(); HOperatorSet.ImagePointsToWorldPlane(hv_CameraParameters, hv_CameraPose, 100, 100, "mm", out hv_X, out hv_Y); //Image Acquisition 01: Code generated by Image Acquisition 01 hv_AcqHandle.Dispose(); HOperatorSet.OpenFramegrabber("GigEVision2", 0, 0, 0, 0, 0, 0, "progressive", -1, "default", -1, "false", "default", "000f314ccf51_AlliedVisionTechnologies_Manta_G125BE0020002", 0, -1, out hv_AcqHandle); //打开相机对待侧物体进行测量 HOperatorSet.GrabImageStart(hv_AcqHandle, -1); HOperatorSet.WaitSeconds(1); ho_Image.Dispose(); HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1); hv_Width.Dispose();hv_Height.Dispose(); HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height); HOperatorSet.SetWindowAttr("background_color","black"); HOperatorSet.OpenWindow(0,0,hv_Width,hv_Height,0,"visible","",out hv_WindowID); HDevWindowStack.Push(hv_WindowID); if (HDevWindowStack.IsOpen()) { HOperatorSet.DispObj(ho_Image, HDevWindowStack.GetActive()); } ho_Regions.Dispose(); HOperatorSet.Threshold(ho_Image, out ho_Regions, 20, 255); ho_ConnectedRegions.Dispose(); HOperatorSet.Connection(ho_Regions, out ho_ConnectedRegions); ho_SelectedRegions.Dispose(); HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions, "area", "and", 400000, 10000688); ho_RegionFillUp.Dispose(); HOperatorSet.FillUp(ho_SelectedRegions, out ho_RegionFillUp); ho_Contours1.Dispose(); HOperatorSet.GenContourRegionXld(ho_RegionFillUp, out ho_Contours1, "border"); hv_Row2.Dispose();hv_Column2.Dispose();hv_Radius1.Dispose();hv_StartPhi1.Dispose();hv_EndPhi1.Dispose();hv_PointOrder1.Dispose(); HOperatorSet.FitCircleContourXld(ho_Contours1, "algebraic", -1, 0, 0, 3, 1, out hv_Row2, out hv_Column2, out hv_Radius1, out hv_StartPhi1, out hv_EndPhi1, out hv_PointOrder1); //显示信息 if (HDevWindowStack.IsOpen()) { HOperatorSet.DispObj(ho_Image, HDevWindowStack.GetActive()); } if (HDevWindowStack.IsOpen()) { HOperatorSet.SetDraw(HDevWindowStack.GetActive(), "margin"); } HOperatorSet.DispCircle(hv_WindowID, hv_Row2, hv_Column2, hv_Radius1); //disp_circle (WindowID, Row2, Column2, (Row2 + Column2) % 50) hv_RealDiameter.Dispose(); using (HDevDisposeHelper dh = new HDevDisposeHelper()) { hv_RealDiameter = (hv_Radius1*2)/(100/hv_X); } using (HDevDisposeHelper dh = new HDevDisposeHelper()) { disp_message(hv_WindowID, ("实际直径:"+hv_RealDiameter)+"mm", "image", hv_Row2, hv_Column2, "black", "true"); } // stop(...); only in hdevelop ho_Image.Dispose(); ho_Regions.Dispose(); ho_ConnectedRegions.Dispose(); ho_SelectedRegions.Dispose(); ho_RegionFillUp.Dispose(); ho_Contours1.Dispose(); hv_CameraParameters.Dispose(); hv_CameraPose.Dispose(); hv_X.Dispose(); hv_Y.Dispose(); hv_AcqHandle.Dispose(); hv_Width.Dispose(); hv_Height.Dispose(); hv_WindowID.Dispose(); hv_Row2.Dispose(); hv_Column2.Dispose(); hv_Radius1.Dispose(); hv_StartPhi1.Dispose(); hv_EndPhi1.Dispose(); hv_PointOrder1.Dispose(); hv_RealDiameter.Dispose(); } #endif }

在C#开发时,需摘抄部分代码移植到项目工程中,

工程界面:

?工程代码:

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 HalconDotNet; using System.Threading; //开线程取图 namespace haclonC { public partial class Form1 : Form { //HTuple hv_WindowId; //HTuple hv_AcqHandle; // HObject ho_Image; //HTuple hv_With, hv_Height; bool m_fContinueGrab = false; public Form1() { InitializeComponent(); } HObject ho_Image = null; HTuple hv_AcqHandle = new HTuple(); HTuple hv_Width = new HTuple(); HTuple hv_Height = new HTuple(); Thread thContiGrab; private void buttonpaizhao_Click(object sender, EventArgs e) { if(m_fContinueGrab == false) { m_fContinueGrab = true; thContiGrab = new Thread(ThreadContinueGrab); thContiGrab.Start(); thContiGrab.IsBackground = true; buttonpaizhao.Text = "停止"; } else { m_fContinueGrab = false; thContiGrab.Abort(); buttonpaizhao.Text = "实时"; } } private void ThreadContinueGrab() { while(true) { //先销毁对象,否则就会造成内存泄漏 ho_Image.Dispose(); //采图显示 HOperatorSet.GrabImage(out ho_Image, hv_AcqHandle); //HOperatorSet.DispObj(ho_Image,hv_WindowId); } } private void button1_Click(object sender, EventArgs e) { HOperatorSet.GenEmptyObj(out ho_Image); hv_AcqHandle.Dispose(); HOperatorSet.OpenFramegrabber("GigEVision2", 0, 0, 0, 0, 0, 0, "progressive", -1, "default", -1, "false", "default", "000f314ccf51_AlliedVisionTechnologies_Manta_G125BE0020002", 0, -1, out hv_AcqHandle); HOperatorSet.GrabImageStart(hv_AcqHandle, -1); } HTuple hv_WindowHandle = new HTuple(); private void button2_Click(object sender, EventArgs e) { timer1.Enabled = true; HOperatorSet.OpenWindow(0, 0, hWindowControl1.Width, hWindowControl1.Height, hWindowControl1.HalconWindow, "visible", "", out hv_WindowHandle); HDevWindowStack.Push(hv_WindowHandle);//入栈 } private void timer1_tick(object sender, EventArgs e) { ho_Image.Dispose(); //hv_AcqHandle.Dispose(); HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1); //Image Acquisition 01: Do something hv_Width.Dispose(); hv_Height.Dispose(); HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height); if (HDevWindowStack.IsOpen()) { HOperatorSet.SetPart(HDevWindowStack.GetActive(), 0, 0, hv_Height, hv_Width); } if (HDevWindowStack.IsOpen())//实时显示 { HOperatorSet.DispObj(ho_Image, HDevWindowStack.GetActive()); } } private void hWindowControl1_Load(object sender, EventArgs e) { } private void button3_Click(object sender, EventArgs e) { timer1.Enabled = false;//一定要关闭timer HOperatorSet.CloseFramegrabber(hv_AcqHandle); ho_Image.Dispose(); } } }

结果显示,

?

?



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有