private void button3_Click(object sender, EventArgs e) { button7.Enabled = true; int index = comboBox1.SelectedIndex; if (index >= 0) { switch (_id) { case LEFT_SOLDER: VisionProject.Instance.SolderLeftShape(index, hImage.Clone()); break; case RIGHT_SOLSER: VisionProject.Instance.SolderRightShape(index, hImage.Clone()); break; case LEFT_POLISH: VisionProject.Instance.PolishLeftShape(index, hImage.Clone()); break; case RIGHT_POLISH: VisionProject.Instance.PolishRightShape(index, hImage.Clone()); break; } } }
HTuple GetGrayHisto(HTuple rectangle1) { if (HObjList == null || HObjList.Count < 1) { return(null); } HImage hv_image = HObjList[0].HObj as HImage; if (hv_image != null) { try { HTuple hv_AbsoluteHisto, hv_RelativeHisto; HTuple channel = hv_image.CountChannels(); HImage imgTmp = null; if (channel == 3) { imgTmp = hv_image.Rgb1ToGray(); } else { imgTmp = hv_image.Clone(); } HRegion region = new HRegion(); region.GenRectangle1(rectangle1[0].D, rectangle1[1], rectangle1[2], rectangle1[3]); hv_AbsoluteHisto = imgTmp.GrayHisto(region, out hv_RelativeHisto); return(hv_AbsoluteHisto); } catch (Exception) { } } return(null); }
private void tsb_save_Click(object sender, EventArgs e) { if (CurrentImg != null) { SaveImage(CurrentImg.Clone()); } }
private void button6_Click(object sender, EventArgs e) { HImage hImage = VisionProject.Instance.Camera[0].GetCurrentImage(); ctrller.Reset(); hWndCtrller.AddIconicVar(hImage.Clone()); DrawRegionCtrlFlag = 0; VisionProject.Instance.CheckStick(this.hWindowControl1); if (VisionProject.Instance.visionApi.CheckStick.Count == 4) { label3.Text = string.Format("上:X={0:0.00},Y={1:0.00},R={2:0.00}", VisionProject.Instance.visionApi.CheckStick[0].X, VisionProject.Instance.visionApi.CheckStick[0].Y, VisionProject.Instance.visionApi.CheckStick[0].R); label5.Text = string.Format("下:X={0:0.00},Y={1:0.00},R={2:0.00}", VisionProject.Instance.visionApi.CheckStick[1].X, VisionProject.Instance.visionApi.CheckStick[1].Y, VisionProject.Instance.visionApi.CheckStick[1].R); label4.Text = string.Format("左:X={0:0.00},Y={1:0.00},R={2:0.00}", VisionProject.Instance.visionApi.CheckStick[2].X, VisionProject.Instance.visionApi.CheckStick[2].Y, VisionProject.Instance.visionApi.CheckStick[2].R); label6.Text = string.Format("右:X={0:0.00},Y={1:0.00},R={2:0.00}", VisionProject.Instance.visionApi.CheckStick[3].X, VisionProject.Instance.visionApi.CheckStick[3].Y, VisionProject.Instance.visionApi.CheckStick[3].R); } }
private void button3_Click(object sender, EventArgs e) { string[] file = Wells.class_Public.openFiles(false, false); if (file != null && file.Length > 0) { img = new HImage(file[0]); //img = img.RotateImage(180d, "constant"); //img = img.InvertImage(); imageDoc1.Image = img.Clone(); } }
private void button2_Click(object sender, EventArgs e) { button5.Enabled = button9.Enabled = false; button7.Enabled = button3.Enabled = true; hImage = VisionProject.Instance.GetCurrentImage(CameraIndex); if (hImage != null) { hWndCtrller.AddIconicVar(hImage.Clone()); Repaint(); } }
private void button6_Click(object sender, EventArgs e) { clsProject.readProject("D:\\aaa.proj"); List <object> objlist = new List <object>(); objlist.Add("region"); objlist.Add(new HRegionEntry(clsProject.Instance.region, "red", "fill")); imageDoc1.Image = img.Clone(); imageDoc1.updateImage(objlist); HOperatorSet.WriteRegion(clsProject.Instance.region, "D:\\a.tiff"); }
//查找模板 public bool FindShapeModeAct(HImage refImage, CreateShapeModel createShapeModel, HImage image) { this.createShapeModel = createShapeModel; this.refImage = refImage; if (createShapeModel.hShapeModel == null || !createShapeModel.hShapeModel.IsInitialized() || createShapeModel.createNewModelID) { if (!createShapeModel.CreateShapeModelAct(refImage)) { return(false); } } try { HImage searchImage; if (SearchRegion != null && SearchRegion.IsInitialized()) { searchImage = image.ReduceDomain(SearchRegion); } else { searchImage = image.Clone(); } row = new HTuple(); column = new HTuple(); angle = new HTuple(); scale = new HTuple(); score = new HTuple(); createShapeModel.hShapeModel.SetShapeModelParam("border_shape_models", "false"); createShapeModel.hShapeModel.FindScaledShapeModel( searchImage, createShapeModel.angleStart, createShapeModel.angleExtent, createShapeModel.scaleMin, createShapeModel.scaleMax, minScore, numMatches, maxOverlap, new HTuple(subPixel).TupleConcat("max_deformation 1"), new HTuple(new int[] { createShapeModel.numLevels, numLevels }), greediness, out row, out column, out angle, out scale, out score); searchImage.Dispose(); } catch { return(false); } return(true); }
private void button7_Click(object sender, EventArgs e) { HImage hImage = VisionProject.Instance.Camera[0].GetCurrentImage(); ctrller.Reset(); hWndCtrller.AddIconicVar(hImage.Clone()); DrawRegionCtrlFlag = 0; hWndCtrller.Repaint(); ShapeModel model = VisionProject.Instance.visionTool.checkStick.Location; if (model.InputImg != null) { model.InputImg.Dispose(); } model.InputImg = hImage; }
private void btn_grabCamera_Click(object sender, EventArgs e) { if (testImage != null && testImage.IsInitialized()) { testImage.Dispose(); } testImage = tool.GetImage(); if (testImage == null) { return; } if (testImage.IsInitialized() == false) { return; } if (calHImages == null) { calHImages = new List <HImage>(); } index = calHImages.Count + 1; try { HOperatorSet.FindCalibObject(testImage, CalibDataID, 0, 0, index, new HTuple(), new HTuple()); } // catch (Exception) catch (HalconException HDevExpDefaultException1) { HTuple hv_Exception; HDevExpDefaultException1.ToHTuple(out hv_Exception); MessageBox.Show("提取原点错误", "请注意不要遮挡或者拍摄时抖动", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } calHImages.Add(testImage.Clone()); if (index == 1) { cbb_CalibImages.Items.Clear(); } cbb_CalibImages.Items.Add(index.ToString()); cbb_CalibImages.SelectedIndex = index - 1; }
public static HTuple getGrayHisto(HImage image, HTuple rectangle1 = null) { if (image != null) { try { HTuple hv_AbsoluteHisto, hv_RelativeHisto; HTuple channel = image.CountChannels(); HImage imgTmp = null; if (channel == 3) { imgTmp = image.Rgb1ToGray(); } else { imgTmp = image.Clone(); } HRegion region = new HRegion(); if (rectangle1 == null) { HTuple col, row; imgTmp.GetImageSize(out col, out row); region.GenRectangle1(0, 0, row - 1, col - 1); } else { region.GenRectangle1(rectangle1[0].D, rectangle1[1], rectangle1[2], rectangle1[3]); } hv_AbsoluteHisto = imgTmp.GrayHisto(region, out hv_RelativeHisto); return(hv_AbsoluteHisto); } catch (Exception exc) { Wells.FrmType.frm_Log.Log("获取灰度直方图出错:" + exc.Message, 2); } } return(null); }
private void btnGetImage_Click(object sender, EventArgs e) { if ((tool.Camera == null) & !tool.OffLineMode) { MessageBox.Show($"相机{tool.CameraIndex}没有连接", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } try { if ((tool.Camera == null) & tool.OffLineMode) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Title = "选择现有图片做为模板"; ofd.Filter = "BMP Files (*.bmp)|*.bmp|JPEG Files (*.jpg)|*.jpg|PNG Files (*.png)|*.png"; ofd.Multiselect = false; if (ofd.ShowDialog() == DialogResult.OK) { HImage hi = new HImage(); hi.ReadImage(ofd.FileName); tool.ImageTestOut = hi.Clone(); tool.ShowImage(hWndUnit1.HWndCtrl); hWndUnit1.HWndCtrl.Repaint(); } return; } } catch (Exception) { MessageBox.Show("设置离线模板失败", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } tool.SetExtTriggerDataOff(); //只有设CreateImageTool的isExtTrigger为off,才能触发RunAct()的GrabImage()获取新图片。 tool.GetImage(); tool.ShowImage(hWndUnit1.HWndCtrl); hWndUnit1.HWndCtrl.Repaint(); }
public static void SaveCacheImagesForRegion(this HImage image, HRegion domain, HRegion includeRegion, HRegion excludeRegion, string fileName) { var dir = typeof(Ex).Assembly.GetAssemblyDirectoryPath(); var cacheDir = Path.Combine(dir, "CacheImages"); if (!Directory.Exists(cacheDir)) { Directory.CreateDirectory(cacheDir); } var imageWidth = image.GetWidth(); var imageHeight = image.GetHeight(); // Domain.Ori var reducedImage = image.ChangeDomain(domain); var croppedImage = reducedImage.CropDomain(); croppedImage.WriteImageOfTiff(cacheDir.CombilePath(fileName) + ".Domain.Ori.tif"); reducedImage.Dispose(); croppedImage.Dispose(); // Domain.PaintMargin var reducedImage4 = image.ChangeDomain(domain); var paintRegionImage = reducedImage4.PaintRegion(includeRegion, 250.0, "margin"); var paintRegion2Image = paintRegionImage.PaintRegion(excludeRegion, 5.0, "margin"); var croppedImage2 = paintRegion2Image.CropDomain(); croppedImage2.WriteImageOfTiff(cacheDir.CombilePath(fileName) + ".Domain.PaintMargin.tif"); reducedImage4.Dispose(); croppedImage2.Dispose(); paintRegionImage.Dispose(); paintRegion2Image.Dispose(); // PaintFill // var paintRegion3Image = reducedImage.PaintRegion(includeRegion, 250.0, "fill"); // var croppedImage2bImage = paintRegion3Image.CropDomain(); // croppedImage2bImage.ToBitmapSource().SaveToTiff(cacheDir.CombilePath(fileName) + ".Domain.PaintFill.tif"); // croppedImage2bImage.Dispose(); // Domain.Crop var reducedImage3 = image.ChangeDomain(includeRegion); var croppedImage3 = reducedImage3.CropDomain(); croppedImage3.WriteImageOfTiff(cacheDir.CombilePath(fileName) + ".Domain.Crop.tif"); reducedImage3.Dispose(); croppedImage3.Dispose(); // bin image in domain var row1 = domain.GetRow1(); var column1 = domain.GetColumn1(); var movedRegion = includeRegion.MoveRegion(-row1, -column1); var w = domain.GetWidth(); var h = domain.GetHeight(); var binImage = movedRegion.RegionToBin(255, 0, w, h); binImage.WriteImageOfTiff(cacheDir.CombilePath(fileName) + ".Domain.Bin.tif"); binImage.Dispose(); movedRegion.Dispose(); // Full.Bin, var binImage2 = includeRegion.RegionToBin(255, 0, imageWidth, imageHeight); binImage2.WriteImageOfJpeg(cacheDir.CombilePath(fileName) + ".Full.Bin.jpg"); binImage2.Dispose(); // Full.BinOnlyDomain var binImage3 = includeRegion.RegionToBin(255, 0, imageWidth, imageHeight); var reducedImage5 = binImage3.ReduceDomain(domain); var binOnlyDomainImage = image.Clone(); binOnlyDomainImage.OverpaintGray(reducedImage5); binOnlyDomainImage.WriteImageOfJpeg(cacheDir.CombilePath(fileName) + ".Full.BinOnlyDomain.jpg"); binImage3.Dispose(); reducedImage5.Dispose(); binOnlyDomainImage.Dispose(); }
/// <summary> /// 当前图片 /// </summary> /// <returns></returns> public HImage GetCurrentImage() { HImage _CurrentImg = CurrentImg.Clone(); return(_CurrentImg); }
public bool FindShapeModeAct(HImage refImage, CreateShapeModel createShapeModel, HImage image) { this.createShapeModel = createShapeModel; this.refImage = refImage; if (createShapeModel.hShapeModel == null || !createShapeModel.hShapeModel.IsInitialized() || createShapeModel.createNewModelID) { if (!createShapeModel.CreateShapeModelAct(refImage)) { return(false); } } try { HImage searchImage; if (SearchRegion != null && SearchRegion.IsInitialized()) { searchImage = image.ReduceDomain(SearchRegion); } else { searchImage = image.Clone(); } ////阈值切割出预选框/// LG_lenght = new HTuple(); LG_Area = new HTuple(); DP_width = new HTuple(); HRegion threshold_region, closing_region, fill_up_region, connection; threshold_region = searchImage.Threshold(new HTuple(LG_threshould), 255).OpeningCircle(5.0); closing_region = threshold_region.ClosingRectangle1(Closing_width, Closing_height); fill_up_region = closing_region.FillUp(); connection = fill_up_region.Connection(); if (scan_regions != null && scan_regions.IsInitialized()) { scan_regions.Dispose(); } scan_regions = connection.SelectShape ( new HTuple("area").TupleConcat("rect2_len1").TupleConcat("rect2_len2"), "and", new HTuple(LG_Area_min).TupleConcat(LG_lenght_min / 2).TupleConcat(DP_width_min / 2), new HTuple(LG_Area_max).TupleConcat(LG_lenght_max / 2).TupleConcat(DP_width_max / 2) ); if (threshold_region != null && threshold_region.IsInitialized()) { threshold_region.Dispose(); } if (closing_region != null && closing_region.IsInitialized()) { closing_region.Dispose(); } if (fill_up_region != null && fill_up_region.IsInitialized()) { fill_up_region.Dispose(); } if (connection != null && connection.IsInitialized()) { connection.Dispose(); } ////阈值切割出预选框/// row = new HTuple(); column = new HTuple(); angle = new HTuple(); scale = new HTuple(); score = new HTuple(); int Num = scan_regions.CountObj(); if (Num == 0) { return(true); } for (int i = 1; i <= Num; i++) { HRegion scan_region_temp = scan_regions.SelectObj(i); double row_rect2, col_rect2, phi_rect2, leght1_rect2, lenght2_rect2; scan_region_temp.SmallestRectangle2(out row_rect2, out col_rect2, out phi_rect2, out leght1_rect2, out lenght2_rect2); if (LG_lenght == null || LG_lenght.Length == 0) { LG_lenght = new HTuple(2 * leght1_rect2); } else { LG_lenght = LG_lenght.TupleConcat(new HTuple(2 * leght1_rect2)); } if (DP_width == null || DP_width.Length == 0) { DP_width = new HTuple(2 * lenght2_rect2); } else { DP_width = DP_width.TupleConcat(new HTuple(2 * lenght2_rect2)); } if (LG_Area == null || LG_Area.Length == 0) { LG_Area = scan_region_temp.Area; } else { LG_Area = LG_Area.TupleConcat(scan_region_temp.Area); } row_temp = new HTuple(); column_temp = new HTuple(); angle_temp = new HTuple(); scale_temp = new HTuple(); score_temp = new HTuple(); //HRegion dilation_Diff = image.GetDomain().Difference(scan_region_temp.DilationCircle(10.0)); //HImage souce_image_temp = image.Clone(); //HImage paint_image = souce_image_temp.PaintRegion(dilation_Diff, new HTuple(10).TupleConcat(10).TupleConcat(10), "fill"); //HImage temp = paint_image.ReduceDomain(scan_region_temp.DilationCircle(10.0)); HImage temp = image.ReduceDomain(scan_region_temp.DilationCircle(10.0)); HImage guassImage = temp.GaussFilter(7); //HOperatorSet.SetSystem("thread_num", 4); HTuple t1; HOperatorSet.CountSeconds(out t1); try { createShapeModel.hShapeModel.FindScaledShapeModel( guassImage, createShapeModel.angleStart, createShapeModel.angleExtent, createShapeModel.scaleMin, createShapeModel.scaleMax, minScore, numMatches, maxOverlap, new HTuple(subPixel).TupleConcat("max_deformation 2"), new HTuple(new int[] { createShapeModel.numLevels, numLevels }), greediness, out row_temp, out column_temp, out angle_temp, out scale_temp, out score_temp); } catch { } HTuple t2; HOperatorSet.CountSeconds(out t2); double time = (t2 - t1).D * 1000; Util.Notify("每次模板匹配用时:" + time.ToString("F2") + "ms"); guassImage.Dispose(); temp.Dispose(); //souce_image_temp.Dispose(); //paint_image.Dispose(); //dilation_Diff.Dispose(); scan_region_temp.Dispose(); if (row_temp != null && row_temp.Length > 0) { if (row.Length == 0) { row = row_temp; column = column_temp; angle = angle_temp; scale = scale_temp; score = score_temp; } else { row = row.TupleConcat(row_temp); column = column.TupleConcat(column_temp); angle = angle.TupleConcat(angle_temp); scale = scale.TupleConcat(scale_temp); score = score.TupleConcat(score_temp); } } } searchImage.Dispose(); } catch { return(false); } return(true); }