/// <summary> /// Original => updateEdges() /// <para>顯示測量結果</para> /// </summary> private void showMeasureResult() { HObject edges = mAssistant.getMeasureResults(); if (edges.IsInitialized()) { mView.changeGraphicSettings(GraphicsContext.GC_COLOR, _edgeColor); mView.changeGraphicSettings(GraphicsContext.GC_LINEWIDTH, _lineWidth); mView.addIconicVar(edges); } }
public EditHalconFormBase(bool showResult) { InitializeComponent(); this.StartPosition = FormStartPosition.CenterScreen; hWindow = new HWindowControl(); hWindow.Dock = DockStyle.Fill; this.tabCurrent.Controls.Clear(); this.tabCurrent.Controls.Add(hWindow); mView = new HWndCtrl(this.hWindow); mView.changeGraphicSettings(GraphicsContext.GC_LINESTYLE, new HTuple()); createModelWindowMode = Color.RoyalBlue; trainModelWindowMode = Color.Chartreuse; roiController = new ROIController(); roiController.ROISelected += RoiController_ROISelected; roiController.setROISign(ROIController.MODE_ROI_POS); mView.NotifyIconObserver = new IconicDelegate(UpdateViewData); roiController.NotifyRCObserver = new IconicDelegate(UpdateViewData); mView.useROIController(roiController); mView.setViewState(HWndCtrl.MODE_VIEW_ZOOM_MOVE); halconEditable = this as IHalconEditable; this.nudSettlingTime.Maximum = 1000; this.btnStop.Visible = showResult; this.btnIgnore.Visible = showResult; this.chxFixedROI.Checked = showResult; }
public bool Run_Region(ExecuteBuffer _executeBuffer, out 字符串GVName_halcon outResult, HWndCtrl hWndCtrl) { // outexecutebuffer = _executeBuffer; HObject outImage; outResult = new 字符串GVName_halcon(); HOperatorSet.GenEmptyObj(out outImage); if (!_executeBuffer.imageBuffer.ContainsKey(this.cbb_image.SelectedItem.ToString() + ".img")) { MessageBox.Show("感兴趣区域:无法找到输入图像"); return(false); } if (_executeBuffer.imageBuffer[this.cbb_image.SelectedItem.ToString() + ".img"] == null) { MessageBox.Show("感兴趣区域:无法找到输入图像"); return(false); } HTuple DataCodeHandle, DecodedDataStrings; HObject SymbolXLDs; HOperatorSet.GenEmptyObj(out SymbolXLDs); HOperatorSet.CreateBarCodeModel(new HTuple(), new HTuple(), out DataCodeHandle); HOperatorSet.FindBarCode(_executeBuffer.imageBuffer[this.cbb_image.SelectedItem.ToString() + ".img"], out SymbolXLDs, DataCodeHandle, this.comboBox_type.SelectedItem.ToString(), out DecodedDataStrings); outResult.字符串 = DecodedDataStrings; hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, "green"); hWndCtrl.addIconicVar(SymbolXLDs); hWndCtrl.repaint(); return(true); }
public void ResetView() { lock (globalLock){ try{ foreach (var item in hObjectList) { if (item != null) { item.Dispose(); } } hObjectList.Clear(); viewController.resetAll(); viewController.clearList(); viewController.changeGraphicSettings(GraphicsContext.GC_LINESTYLE, new HTuple()); } catch { } } }
public bool Run_show(ExecuteBuffer _executeBuffer, 模板GVName_halcon Model_result, Dictionary <int, PointName> Pointlist, HWndCtrl hWndCtrl, out string out_info) { int number_source = this.cbb_Inputsource.SelectedIndex; out_info = ""; if (number_source == 0) { if (Model_result == null) { MessageBox.Show("点位显示: 输入为空,其中没有点位"); out_info = "点位显示: 输入为空,其中没有点位"; return(false); } HTuple size = 10; if (Model_result.点X.TupleLength() > 0) { if (linecheck.Checked) { HObject line_match; HOperatorSet.GenEmptyObj(out line_match); // HOperatorSet.GenRegionLine(out line_match, (double)Model_result.点Y[0], (double)Model_result.点X[0], (double)Model_result.点Y[1], (double)Model_result.点X[1]); HOperatorSet.GenContourPolygonXld(out line_match, Model_result.点X, Model_result.点Y); hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, this.comboBox1.SelectedItem.ToString()); hWndCtrl.addIconicVar(line_match); hWndCtrl.repaint(); out_info = "点位显示: 完成"; return(true); } else { HObject cross; HOperatorSet.GenEmptyObj(out cross); HOperatorSet.GenCrossContourXld(out cross, Model_result.点Y, Model_result.点X, size, Model_result.角度Angle); hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, this.comboBox1.SelectedItem.ToString()); hWndCtrl.addIconicVar(cross); hWndCtrl.repaint(); out_info = "点位显示: 完成"; return(true); } } else { out_info = "点位显示: 没有可以显示的点位"; } } else { int number_check = Convert.ToInt32(this.textBox1.Text.ToString()); if (!Pointlist.ContainsKey(number_check)) { MessageBox.Show("点位显示: 输入为空,其中没有点位"); out_info = "点位显示: 输入为空,其中没有点位"; return(false); } HTuple size1 = 20; if (Pointlist[number_check].点X.TupleLength() > 0) { if (linecheck.Checked) { HObject line; HOperatorSet.GenEmptyObj(out line); // HOperatorSet.GenRegionLine(out line, (double)Pointlist[number_check].点Y[0], (double)Pointlist[number_check].点X[0], (double)Pointlist[number_check].点Y[1], (double)Pointlist[number_check].点X[1]); HOperatorSet.GenContourPolygonXld(out line, Pointlist[number_check].点X, Pointlist[number_check].点Y); hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, this.comboBox1.SelectedItem.ToString()); hWndCtrl.addIconicVar(line); hWndCtrl.repaint(); out_info = "点位显示: 完成"; return(true); } else { HObject cross; HOperatorSet.GenEmptyObj(out cross); HOperatorSet.GenCrossContourXld(out cross, Pointlist[number_check].点Y, Pointlist[number_check].点X, size1, 0); hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, this.comboBox1.SelectedItem.ToString()); hWndCtrl.addIconicVar(cross); hWndCtrl.repaint(); out_info = "点位显示: 完成"; return(true); } } else { out_info = "点位显示: 没有可以显示的点位"; } } return(false); }
/************************************************************************* * Change the graphical context regarding the color mode * /**************************************************************************/ private void ColorComboBox_SelectedIndexChanged(object sender, System.EventArgs e) { string val = (string)ColorComboBox.SelectedItem; if (!locked) { switch (val) { case "colored3": viewControl.changeGraphicSettings(GraphicsContext.GC_COLORED, 3); break; case "colored6": viewControl.changeGraphicSettings(GraphicsContext.GC_COLORED, 6); break; case "colored12": viewControl.changeGraphicSettings(GraphicsContext.GC_COLORED, 12); break; default: viewControl.changeGraphicSettings(GraphicsContext.GC_COLOR, val); break; } } }
/// <summary> /// Changes the current graphical context by setting the specified mode /// (constant starting by GC_*) to the specified value. /// </summary> /// <param name="mode"> /// Constant that is provided by the class GraphicsContext /// and describes the mode that has to be changed. Actually /// you can set up following properties of graphical context /// using this function: /// GraphicsContext.GC_COLOR (see dev_set_color) /// GraphicsContext.GC_DRAWMODE (see set_draw) /// GraphicsContext.GC_SHAPE (see set_shape) /// GraphicsContext.GC_LUT (see set_lut) /// GraphicsContext.GC_PAINT (see set_paint) /// </param> /// <param name="val"> /// Value, provided as a string, /// the mode is to be changed to, e.g., "blue" /// </param> public void ChangeGraphicSettings(string mode, string val) { hWndControl.changeGraphicSettings(mode, val); }
public bool Find_halcon_line(ExecuteBuffer _executeBuffer, HWndCtrl hWndCtrl, 模板GVName_halcon Model_result, Dictionary <int, PointName> Point_temp_result, out string result_info, out HTuple Row1, out HTuple Column1, out HTuple Row2, out HTuple Column2, bool show_info) { HTuple MetrologyHandle; HTuple pic_wid, pic_height; Row1 = new HTuple(); Column1 = new HTuple(); Row2 = new HTuple(); Column2 = new HTuple(); result_info = ""; HOperatorSet.CreateMetrologyModel(out MetrologyHandle); if (!_executeBuffer.imageBuffer.ContainsKey(this.Threshold_image.SelectedItem.ToString() + ".img")) { // MessageBox.Show("查找直线: 输入图像已经不存在,请重置设置输入图像"); result_info = " 查找直线: 输入图像已经不存在,请重置设置输入图像"; return(false); } if (_executeBuffer.imageBuffer[this.Threshold_image.SelectedItem.ToString() + ".img"] == null) { // MessageBox.Show("查找直线: image参数为空或者未赋值"); result_info = " 查找直线: 输入图像已经不存在,请重置设置输入图像"; return(false); } HObject imagein = _executeBuffer.imageBuffer[this.Threshold_image.SelectedItem.ToString() + ".img"]; HOperatorSet.GetImageSize(imagein, out pic_wid, out pic_height); HOperatorSet.SetMetrologyModelImageSize(MetrologyHandle, pic_wid, pic_height); HTuple Index; HTuple trow1, trow2, tcol1, tcol2; if (checkBox_line.Checked) { if (xrow1 == null || xrow2 == null || xcol1 == null || xcol2 == null) { // MessageBox.Show("查找直线:未确认线位置"); result_info = " 查找直线: 未确认线位置"; return(false); } else { trow1 = xrow1; tcol1 = xcol1; trow2 = xrow2; tcol2 = xcol2; } } else { if (this.cbb_source1.SelectedIndex == 0) { if (Model_result == null) { // MessageBox.Show("查找直线:匹配列表为空,请设置"); result_info = " 查找直线: 匹配列表为空,请设置"; return(false); } if (Model_result.点X.TupleLength() < 1) { // MessageBox.Show("查找直线:匹配列表为空,请设置"); result_info = " 查找直线: 匹配列表为空,请设置"; return(false); } trow1 = Model_result.点Y[0]; tcol1 = Model_result.点X[0]; } else { int number1 = Convert.ToInt32(this.tb_value1.Text); if (!Point_temp_result.ContainsKey(number1)) { // MessageBox.Show("查找直线:全局列表点无此点,请设置"); result_info = " 查找直线: 全局列表无此点,请设置"; return(false); } else { trow1 = Point_temp_result[number1].点Y; tcol1 = Point_temp_result[number1].点X; } } int number2 = Convert.ToInt32(this.tb_value2.Text); if (!Point_temp_result.ContainsKey(number2)) { // MessageBox.Show("查找直线:全局列表点无此点,请设置"); result_info = " 查找直线: 全局列表无此点,请设置"; return(false); } else { trow2 = Point_temp_result[number2].点Y; tcol2 = Point_temp_result[number2].点X; } } HOperatorSet.AddMetrologyObjectLineMeasure(MetrologyHandle, trow1, tcol1, trow2, tcol2, Convert.ToInt32(this.measure_length1.Text.ToString()), Convert.ToInt32(this.measure_length2.Text.ToString()), 1, Convert.ToInt32(this.measure_threshold.Text.ToString()), new HTuple(), new HTuple(), out Index); HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "measure_transition", this.cbb_transition.SelectedItem.ToString()); HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "num_measures", Convert.ToInt32(this.num_measure.Text.ToString())); HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "num_instances", 40); HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "measure_sigma", 1); //HOperatorSet.SetMetrologyObjectParam(MetrologyHandle,"all","measure_threshold",50); HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "measure_interpolation", "bicubic"); HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "measure_select", this.cbb_measure_select.SelectedItem.ToString()); HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "min_score", Convert.ToDouble(this.min_score.Text)); HOperatorSet.ApplyMetrologyModel(imagein, MetrologyHandle); HObject Contours, Cross; HTuple Rowx, Columnx; HOperatorSet.GetMetrologyObjectMeasures(out Contours, MetrologyHandle, "all", "all", out Rowx, out Columnx); HOperatorSet.GenCrossContourXld(out Cross, Rowx, Columnx, 6, 0.785398); HTuple hv_Parameter = null; //得到线的起点和终点坐标并显示出来 HOperatorSet.GetMetrologyObjectResult(MetrologyHandle, "all", "all", "result_type", "all_param", out hv_Parameter); if (hv_Parameter.TupleLength() == 0) { result_info = " 查找直线: 在指定位置,找直线失败"; // MessageBox.Show("未找到直线"); return(false); } int line_count = hv_Parameter.TupleLength() / 4; double[] Row_1 = new double[line_count]; double[] Column_1 = new double[line_count]; double[] Row_2 = new double[line_count]; double[] Column_2 = new double[line_count]; for (int imx = 0; imx < line_count; imx++) { Row_1[imx] = hv_Parameter[imx * 4 + 1].D; Column_1[imx] = hv_Parameter[imx * 4].D; Row_2[imx] = hv_Parameter[imx * 4 + 3].D; Column_2[imx] = hv_Parameter[imx * 4 + 2].D; } Row1 = (HTuple)Row_1; Column1 = (HTuple)Column_1; Row2 = (HTuple)Row_2; Column2 = (HTuple)Column_2; HObject ho_Contour; HOperatorSet.GenEmptyObj(out ho_Contour); ho_Contour.Dispose(); HOperatorSet.GetMetrologyObjectResultContour(out ho_Contour, MetrologyHandle, "all", "all", 1.5); HOperatorSet.ClearMetrologyModel(MetrologyHandle); if (show_info) { hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, this.comboBox1.SelectedItem.ToString()); hWndCtrl.addIconicVar(Cross); hWndCtrl.addIconicVar(Contours); } hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, this.comboBox1.SelectedItem.ToString()); hWndCtrl.addIconicVar(ho_Contour); hWndCtrl.repaint(); return(true); }
public bool Find_halcon_circle(ExecuteBuffer _executeBuffer, HWndCtrl hWndCtrl, 模板GVName_halcon Model_result, Dictionary <int, PointName> Point_temp_result, out string result_info, out HTuple Row, out HTuple Column, out HTuple Radius, bool show_info) { HTuple MetrologyHandle; HTuple pic_wid, pic_height; Row = new HTuple(); Column = new HTuple(); Radius = new HTuple(); result_info = ""; HOperatorSet.CreateMetrologyModel(out MetrologyHandle); if (!_executeBuffer.imageBuffer.ContainsKey(this.Threshold_image.SelectedItem.ToString() + ".img")) { MessageBox.Show("查找圆: 输入图像已经不存在,请重置设置输入图像"); result_info = " 查找圆: 输入图像已经不存在,请重置设置输入图像"; return(false); } if (_executeBuffer.imageBuffer[this.Threshold_image.SelectedItem.ToString() + ".img"] == null) { MessageBox.Show("查找圆: image参数为空或者未赋值"); result_info = " 查找圆: 输入图像已经不存在,请重置设置输入图像"; return(false); } /* * if (xrow == null || xcol == null || xradius == null) * { * MessageBox.Show("查找圆: 未确定圆位置"); * result_info = " 查找圆: 未确定圆位置"; * return false; * }*/ HObject imagein = _executeBuffer.imageBuffer[this.Threshold_image.SelectedItem.ToString() + ".img"]; HOperatorSet.GetImageSize(imagein, out pic_wid, out pic_height); HOperatorSet.SetMetrologyModelImageSize(MetrologyHandle, pic_wid, pic_height); HTuple Index; HTuple trow, tcol, tradius; if (this.checkBox_circle.Checked) { if (xrow == null || xcol == null || xradius == null) { MessageBox.Show("查找直线:未确认线位置"); result_info = " 查找直线: 未确认线位置"; return(false); } else if (xrow.D == 0 && xcol.D == 0 && xradius.D == 0) { MessageBox.Show("查找直线:未确认线位置"); result_info = " 查找直线: 未确认线位置"; return(false); } else { trow = xrow; tcol = xcol; tradius = xradius; } } else { tradius = Convert.ToDouble(this.textBox_radius.Text); if (this.cbb_source1.SelectedIndex == 0) { if (Model_result == null) { MessageBox.Show("查找圆:匹配列表为空,请设置"); result_info = " 查找圆: 匹配列表为空,请设置"; return(false); } if (Model_result.点X.TupleLength() < 1) { MessageBox.Show("查找圆:匹配列表为空,请设置"); result_info = " 查找圆: 匹配列表为空,请设置"; return(false); } trow = Model_result.点Y[0]; tcol = Model_result.点X[0]; } else { int number1 = Convert.ToInt32(this.tb_value1.Text); if (!Point_temp_result.ContainsKey(number1)) { MessageBox.Show("查找圆:全局列表点无此点,请设置"); result_info = " 查找圆: 全局列表无此点,请设置"; return(false); } else { trow = Point_temp_result[number1].点Y; tcol = Point_temp_result[number1].点X; } } } HOperatorSet.AddMetrologyObjectCircleMeasure(MetrologyHandle, trow, tcol, tradius, Convert.ToInt32(this.measure_length1.Text.ToString()), Convert.ToInt32(this.measure_length2.Text.ToString()), 1, Convert.ToInt32(this.measure_threshold.Text.ToString()), new HTuple(), new HTuple(), out Index); // HOperatorSet.SetMetrologyObjectParam(MetrologyHandle,"all","measure_transition","negative"); HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "measure_transition", this.cbb_transition.SelectedItem.ToString()); HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "measure_select", this.cbb_measure_select.SelectedItem.ToString()); HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "num_measures", Convert.ToInt32(this.num_measure.Text.ToString())); HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "num_instances", 40); HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "measure_sigma", 1); HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "measure_interpolation", "bicubic"); //HOperatorSet.SetMetrologyObjectParam(MetrologyHandle,"all","measure_select","all"); HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "min_score", 0.4); HOperatorSet.ApplyMetrologyModel(imagein, MetrologyHandle); HObject Contours, Cross; HOperatorSet.GetMetrologyObjectMeasures(out Contours, MetrologyHandle, "all", "all", out Row, out Column); HOperatorSet.GenCrossContourXld(out Cross, Row, Column, 6, 0.785398); HTuple hv_Parameter = null; //得到线的起点和终点坐标并显示出来 HOperatorSet.GetMetrologyObjectResult(MetrologyHandle, "all", "all", "result_type", "all_param", out hv_Parameter); if (hv_Parameter.TupleLength() == 0) { result_info = " 查找圆: 在指定位置,找圆失败"; MessageBox.Show("未找到圆"); return(false); } int Circle_number = hv_Parameter.TupleLength() / 3; double[] Row_out = new double[Circle_number]; double[] Column_out = new double[Circle_number]; double[] Radius_out = new double[Circle_number]; for (int i = 0; i < Circle_number; i++) { Row_out[i] = hv_Parameter[i * 3 + 1].D; Column_out[i] = hv_Parameter[i * 3].D; Radius_out[i] = hv_Parameter[i * 3 + 2].D; } Row = (HTuple)Row_out; Column = (HTuple)Column_out; Radius = (HTuple)Radius_out; HObject ho_Contour; HOperatorSet.GenEmptyObj(out ho_Contour); ho_Contour.Dispose(); HOperatorSet.GetMetrologyObjectResultContour(out ho_Contour, MetrologyHandle, "all", "all", 1.5); HOperatorSet.ClearMetrologyModel(MetrologyHandle); if (show_info) { hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, this.comboBox1.SelectedItem.ToString()); hWndCtrl.addIconicVar(Cross); hWndCtrl.addIconicVar(Contours); } hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, this.comboBox1.SelectedItem.ToString()); hWndCtrl.addIconicVar(ho_Contour); hWndCtrl.repaint(); return(true); }
public bool CalibrationMake(SourceBuffer _sourceBuffer, ExecuteBuffer _executeBuffer, out SourceBuffer outsourcebuffer, out ExecuteBuffer outexecutebuffer, HWndCtrl hWndCtrl, out string result_info) { outsourcebuffer = _sourceBuffer; outexecutebuffer = _executeBuffer; result_info = ""; HTuple hv_PixelSize = 0.00001; HTuple hv_Message = new HTuple(), hv_Row = new HTuple(); HTuple hv_Column = new HTuple(), hv_Index = new HTuple(); HTuple hv_Error = null; HObject ho_Contours = null, ho_Cross = null, hv_outimage = null; HTuple hv_HomMat3DIdentity = null; HTuple hv_cp1Hur1 = null, hv_cam2Hcp2 = null, hv_cam2Hul2 = null; HTuple hv_PoseNewOrigin2 = null, hv_ULX = null, hv_ULY = null, hv_PoseNewOrigin = null; double[] Get_actual_pixel = new double[7]; HTuple WorldPixelx, WorldPixely; HTuple Heightx = new HTuple(), Widthx = new HTuple(); Heightx.Append(Height / 2); Heightx.Append(Height / 2); Heightx.Append(Height / 2 + 1); Widthx.Append(Width / 2); Widthx.Append(Width / 2 + 1); Widthx.Append(Width / 2); HTuple WorldLength1, WorldLength2; HTuple ScaleForSimilarPixelSize = 0; HOperatorSet.GenEmptyObj(out ho_Contours); HOperatorSet.GenEmptyObj(out ho_Cross); HOperatorSet.GenEmptyObj(out hv_outimage); if (!_executeBuffer.imageBuffer.ContainsKey(this.Input_image.SelectedItem.ToString() + ".img")) { MessageBox.Show("二值化处理: 输入图像已经不存在,请重置设置输入图像"); result_info = " 二值化处理: 输入图像已经不存在,请重置设置输入图像"; return(false); } if (_executeBuffer.imageBuffer[this.Input_image.SelectedItem.ToString() + ".img"] == null) { MessageBox.Show("二值化处理: image参数为空或者未赋值"); result_info = " 二值化处理: 输入图像已经不存在,请重置设置输入图像"; return(false); } string comboBox_imageoutname = this.Output_image.Text.ToString() + ".img"; if (_executeBuffer.imageBuffer[comboBox_imageoutname] != null) { if (_executeBuffer.imageBuffer[comboBox_imageoutname].IsInitialized()) { _executeBuffer.imageBuffer[comboBox_imageoutname].Dispose(); } } HTuple width, height; int m = _executeBuffer.imageBuffer[this.Input_image.SelectedItem.ToString() + ".img"].CountObj(); HOperatorSet.GetImageSize(_executeBuffer.imageBuffer[this.Input_image.SelectedItem.ToString() + ".img"], out width, out height); int number = Convert.ToInt32(this.textBox1.Text.ToString()); if (!this.checkBox1.Checked) { if (Get_Cal_pixel) { Get_Cal_pixel = false; } if (number == 0) { hv_StartCamPar = new HTuple(); if (this.checkBox_focalize.Checked) { hv_StartCamPar.Append(0); } else { hv_StartCamPar.Append(Convert.ToDouble(this.textbox_lens.Text.ToString()) / 100); } hv_StartCamPar.Append(0); hv_StartCamPar.Append(Convert.ToDouble(this.textBox_width.Text.ToString()) / 10000000); hv_StartCamPar.Append(Convert.ToDouble(this.textBox_height.Text.ToString()) / 10000000); hv_StartCamPar.Append(width / 2); hv_StartCamPar.Append(height / 2); hv_StartCamPar.Append(width); hv_StartCamPar.Append(height); hv_CalTabDescrFile = this.textBox_file.Text; HOperatorSet.CreateCalibData("calibration_object", 1, 1, out CalibDataID); if (this.checkBox_focalize.Checked) { HOperatorSet.SetCalibDataCamParam(CalibDataID, 0, "area_scan_telecentric_division", hv_StartCamPar); } else { HOperatorSet.SetCalibDataCamParam(CalibDataID, 0, "area_scan_division", hv_StartCamPar); } HOperatorSet.SetCalibDataCalibObject(CalibDataID, 0, hv_CalTabDescrFile); } try { HOperatorSet.FindCalibObject(_executeBuffer.imageBuffer[this.Input_image.SelectedItem.ToString() + ".img"], CalibDataID, 0, 0, number, new HTuple(), new HTuple()); HOperatorSet.GetCalibData(CalibDataID, "camera", 0, "init_params", out hv_StartCamPar); HOperatorSet.GetCalibDataObservPoints(CalibDataID, 0, 0, number, out hv_Row, out hv_Column, out hv_Index, out hv_Pose); HOperatorSet.GetCalibDataObservContours(out ho_Contours, CalibDataID, "caltab", 0, 0, number); HOperatorSet.GenCrossContourXld(out ho_Cross, hv_Row, hv_Column, 6, 0.785398); hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, "orange"); hWndCtrl.addIconicVar(ho_Cross); hWndCtrl.addIconicVar(ho_Contours); hWndCtrl.repaint(); } catch { MessageBox.Show("找不到标定板"); ho_Contours.Dispose(); ho_Cross.Dispose(); return(false); } if (number == hv_NumImages - 1) { Read_file = false; HOperatorSet.CalibrateCameras(CalibDataID, out hv_Error); HOperatorSet.GetCalibData(CalibDataID, "camera", 0, "params", out hv_CamParam); HOperatorSet.GetCalibData(CalibDataID, "calib_obj_pose", (new HTuple(0)).TupleConcat(6), "pose", out hv_Pose); HOperatorSet.HomMat3dIdentity(out hv_HomMat3DIdentity); HOperatorSet.HomMat3dRotateLocal(hv_HomMat3DIdentity, ((-(hv_Pose.TupleSelect(5)))).TupleRad(), "z", out hv_cp1Hur1); HOperatorSet.PoseToHomMat3d(hv_Pose, out hv_cam2Hcp2); HOperatorSet.HomMat3dCompose(hv_cam2Hcp2, hv_cp1Hur1, out hv_cam2Hul2); HOperatorSet.HomMat3dToPose(hv_cam2Hul2, out hv_PoseNewOrigin2); HOperatorSet.ImagePointsToWorldPlane(hv_CamParam, hv_PoseNewOrigin2, 0, 0, "m", out hv_ULX, out hv_ULY); HOperatorSet.SetOriginPose(hv_PoseNewOrigin2, hv_ULX, hv_ULY, 0, out hv_PoseNewOrigin); HOperatorSet.ImagePointsToWorldPlane(hv_CamParam, hv_Pose, Heightx, Widthx, 1, out WorldPixelx, out WorldPixely); HOperatorSet.DistancePp(WorldPixely[0], WorldPixelx[0], WorldPixely[1], WorldPixelx[1], out WorldLength1); HOperatorSet.DistancePp(WorldPixely[0], WorldPixelx[0], WorldPixely[2], WorldPixelx[2], out WorldLength2); ScaleForSimilarPixelSize = (WorldLength1 + WorldLength2) / 2; HOperatorSet.GenImageToWorldPlaneMap(out ho_MapSingle1, hv_CamParam, hv_PoseNewOrigin, width, height, width, height, ScaleForSimilarPixelSize, "bilinear"); HOperatorSet.WriteObject(ho_MapSingle1, this.textBox2.Text.ToString()); Read_file = true; Get_Calibration = true; this.checkBox1.Checked = true; result_info = " 校正参数: 设置完成"; } this.textBox1.Text = (number + 1).ToString(); } if (this.checkBox1.Checked) { if (Read_file) { if (File.Exists(this.textBox2.Text)) { HOperatorSet.ReadObject(out ho_MapSingle1, this.textBox2.Text); } else { MessageBox.Show("校正文件不存在 ,请检查"); return(false); } } HOperatorSet.MapImage(_executeBuffer.imageBuffer[this.Input_image.SelectedItem.ToString() + ".img"], ho_MapSingle1, out hv_outimage); _executeBuffer.imageBuffer[comboBox_imageoutname] = hv_outimage; outexecutebuffer = _executeBuffer; result_info = " 校正: 完成"; HTuple Distance; if (!Get_Cal_pixel) { try { double all_number = 0; HOperatorSet.FindCalibObject(hv_outimage, CalibDataID, 0, 0, 0, new HTuple(), new HTuple()); HOperatorSet.GetCalibDataObservPoints(CalibDataID, 0, 0, 0, out hv_Row, out hv_Column, out hv_Index, out hv_Pose); for (int i = 0; i < 7; i++) { HOperatorSet.DistancePp(hv_Row[i * 7], hv_Column[i * 7], hv_Row[i * 7 + 6], hv_Column[i * 7 + 6], out Distance); Get_actual_pixel[i] = Distance.D; all_number = all_number + Get_actual_pixel[i]; } Pixel_number = (Convert.ToDouble(this.textBox_pixel.Text)) / (all_number / 7); Get_Cal_pixel = true; this.label_pixel.Text = Pixel_number.ToString(); Pixel_Trans = Convert.ToDouble(Pixel_number.ToString()); } catch { MessageBox.Show("请再次添加图像寻找计算像素比"); } } if (Read_file) { ho_MapSingle1.Dispose(); } } return(true); }
public bool Run_show(string color_set, 圆GVName_halcon Circle_result, 圆弧GVName_halcon Circlearc_result, 直线GVName_halcon Line_result, HWndCtrl hWndCtrl, out string out_info) { out_info = ""; if (color_set == "") { color_set = "red"; } HObject Circle1; HObject CircleArc1; HObject Line1; if (Circle_result == null) { MessageBox.Show("轮廓显示: 显示圆列表为空"); out_info = "轮廓显示: 圆为空"; } else { int Circle_result_number = Circle_result.圆心X.TupleLength(); for (int j = 0; j < Circle_result_number; j++) { //HOperatorSet.GenCircle(out Circle1, Circle_result.圆心X[j], Circle_result.圆心Y[j], Circle_result.半径R[j]); HOperatorSet.GenCircleContourXld(out Circle1, Circle_result.圆心X[j], Circle_result.圆心Y[j], Circle_result.半径R[j], 0, 2 * Math.PI, "positive", 1); hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, color_set); hWndCtrl.addIconicVar(Circle1); } } if (Circlearc_result == null) { MessageBox.Show("轮廓显示: 圆弧为空"); out_info = out_info + " 圆弧为空"; } else { int Circlearc_result_number = Circlearc_result.半径R.TupleLength(); for (int m = 0; m < Circlearc_result_number; m++) { //HOperatorSet.GenCircleSector(out CircleArc1, Circlearc_result.圆心X[m], Circlearc_result.圆心Y[m], Circlearc_result.半径R[m], Circlearc_result.圆弧Start[m], Circlearc_result.圆弧End[m]); HOperatorSet.GenCircleContourXld(out CircleArc1, Circlearc_result.圆心X[m], Circlearc_result.圆心Y[m], Circlearc_result.半径R[m], Circlearc_result.圆弧Start[m], Circlearc_result.圆弧End[m], "positive", 1); hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, color_set); hWndCtrl.addIconicVar(CircleArc1); } } if (Line_result == null) { MessageBox.Show("轮廓显示: 直线为空"); out_info = out_info + "直线为空"; } else { int line_result_number = Line_result.点1X.TupleLength(); for (int l = 0; l < line_result_number; l++) { HOperatorSet.GenContourPolygonXld(out Line1, ((HTuple)Line_result.点1X[l]).TupleConcat( (HTuple)Line_result.点2X[l]), ((HTuple)Line_result.点1Y[l]).TupleConcat((HTuple)Line_result.点2Y[l])); hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, color_set); hWndCtrl.addIconicVar(Line1); } } hWndCtrl.repaint(); return(true); }