大家好,謝謝網站上哥們幫忙,讓我進入這一個領域。
這兩個月來自學遇到一些問題。
我覺得自己的C#觀念不太足夠,試著寫一個板模匹配的程序。
有些卡住問題,如下C#程式碼。
我想法是
在public partial class HDevelopExport裡面宣告各種方法,也就是灰階或二值化or創建板模。
在控件的部分引用這些方法顯示在視窗。
問題
1.我需要在public void Threshold(HTuple Window) 這個方法內引用public void Opencamera(HTuple Window)裡面的ho_image來做二值化,不過沒辦法直接使用,需要變成每個方法都從頭開一次相機,請問如何引用才會簡潔呢?
2.創建完板模後(out hv_ModelID1),要如何存檔hv_ModelID1編排,C#才可以後續使用find的指令取得當下圖片中的座標位置跟角度呢?
3.之前有嘗試過在public partial class HDevelopExport取得裡面的參數,如何編排才可以在後續的控件中擊點顯示在label1.Text上呢? 無法直接寫label1.text=hv_Row.tostring();
EX. hv_Row1 , hv_Column1
hv_Angle1, hv_Score1
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using HalconDotNet;
namespace 小定位
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
HDevelopExport hd = new HDevelopExport();
public partial class HDevelopExport
{
//變數宣告
public HTuple hv_ExpDefaultWinHandle;
HObject ho_Image, ho_Image2, ho_Regions, ho_GrayImage, ho_ConnectedRegions1;
HObject ho_SelectedRegions, ho_ImageReduced1, ho_ModelImages;
HObject ho_ModelRegions, ho_ModelContours, ho_Image1 = null;
HObject ho_ContoursAffineTrans = null;
HTuple hv_AcqHandle = null, hv_ModelID1 = null;
HTuple hv_NumLevels = null, hv_AngleStart = null, hv_AngleExtent = null;
HTuple hv_AngleStep = null, hv_ScaleMin = null, hv_ScaleMax = null;
HTuple hv_ScaleStep = null, hv_Metric = null, hv_MinContrast = null;
HTuple hv_Row1 = new HTuple(), hv_Column1 = new HTuple();
HTuple hv_Angle1 = new HTuple(), hv_Score1 = new HTuple();
HTuple hv_HomMat2D = new HTuple(), hv_RowTrans = new HTuple();
HTuple hv_ColTrans = new HTuple();
///以上
public void InitHalcon()///
{
// Default settings used in HDevelop
HOperatorSet.SetSystem("width", 512);
HOperatorSet.SetSystem("height", 512);
}
public void Opencamera(HTuple Window)
{
hv_ExpDefaultWinHandle = Window;
HOperatorSet.OpenFramegrabber("USB3Vision", 0, 0, 0, 0, 0, 0, "progressive",-1, "default", -1, "false", "default", "0E70270494A3_ToshibaTeli_BU505MG",0, -1, out hv_AcqHandle);
HOperatorSet.GrabImageStart(hv_AcqHandle, -1);
HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1);
HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle);
ho_Image.Dispose();
HOperatorSet.CloseFramegrabber(hv_AcqHandle);
}
public void Threshold(HTuple Window)
{
hv_ExpDefaultWinHandle = Window;
HOperatorSet.OpenFramegrabber("USB3Vision", 0, 0, 0, 0, 0, 0, "progressive", -1, "default", -1, "false", "default", "0E70270494A3_ToshibaTeli_BU505MG", 0, -1, out hv_AcqHandle);
HOperatorSet.GrabImageStart(hv_AcqHandle, -1);
HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1);
HOperatorSet.GenEmptyObj(out ho_Regions);
ho_Regions.Dispose();
HOperatorSet.Threshold(ho_Image, out ho_Regions, 207, 255);
HOperatorSet.DispObj(ho_Regions, hv_ExpDefaultWinHandle);
HOperatorSet.CloseFramegrabber(hv_AcqHandle);
}
public void sample(HTuple Window)
{
hv_ExpDefaultWinHandle = Window;
HOperatorSet.OpenFramegrabber("USB3Vision", 0, 0, 0, 0, 0, 0, "progressive", -1, "default", -1, "false", "default", "0E70270494A3_ToshibaTeli_BU505MG", 0, -1, out hv_AcqHandle);
HOperatorSet.GrabImageStart(hv_AcqHandle, -1);
HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1);
HOperatorSet.GenEmptyObj(out ho_Regions);
ho_Regions.Dispose();
HOperatorSet.Threshold(ho_Image, out ho_Regions, 207, 255);
HOperatorSet.GenEmptyObj(out ho_ConnectedRegions1);
ho_ConnectedRegions1.Dispose();
HOperatorSet.Connection(ho_Regions, out ho_ConnectedRegions1);
HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
ho_SelectedRegions.Dispose();
HOperatorSet.SelectShape(ho_ConnectedRegions1, out ho_SelectedRegions, "area",
"and", 1.17658e+006, 1.40335e+006);
HOperatorSet.GenEmptyObj(out ho_ImageReduced1);
ho_ImageReduced1.Dispose();
HOperatorSet.ReduceDomain(ho_Image, ho_SelectedRegions, out ho_ImageReduced1);
HOperatorSet.CreateShapeModel(ho_ImageReduced1, "auto", 0, 6.29, "auto", "auto",
"use_polarity", "auto", "auto", out hv_ModelID1);
HOperatorSet.GetShapeModelParams(hv_ModelID1, out hv_NumLevels, out hv_AngleStart,
out hv_AngleExtent, out hv_AngleStep, out hv_ScaleMin, out hv_ScaleMax, out hv_ScaleStep,
out hv_Metric, out hv_MinContrast);
HOperatorSet.GenEmptyObj(out ho_ModelImages);
ho_ModelImages.Dispose();
HOperatorSet.GenEmptyObj(out ho_ModelRegions);
ho_ModelRegions.Dispose();
HOperatorSet.InspectShapeModel(ho_ImageReduced1, out ho_ModelImages, out ho_ModelRegions,
4, 30);
HOperatorSet.GenEmptyObj(out ho_ModelContours);
ho_ModelContours.Dispose();
HOperatorSet.GetShapeModelContours(out ho_ModelContours, hv_ModelID1, 1);
HOperatorSet.CloseFramegrabber(hv_AcqHandle);
HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle);
}
public void find()
{
}
}
@以下為控件引用
private void button1_Click(object sender, EventArgs e)
{
hWindowControl1.HalconWindow.ClearWindow();
hd.Opencamera(hWindowControl1.HalconWindow);
}
private void button2_Click(object sender, EventArgs e)
{
hWindowControl1.HalconWindow.ClearWindow();
hd.Threshold(hWindowControl1.HalconWindow);
}
private void button3_Click(object sender, EventArgs e)
{
hWindowControl1.HalconWindow.ClearWindow();
hd.sample(hWindowControl1.HalconWindow);
}
private void button4_Click(object sender, EventArgs e)
{
}
}
}
|