Пример #1
0
        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;
                }
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
 private void tsb_save_Click(object sender, EventArgs e)
 {
     if (CurrentImg != null)
     {
         SaveImage(CurrentImg.Clone());
     }
 }
Пример #4
0
        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);
            }
        }
Пример #5
0
 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();
     }
 }
Пример #6
0
        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();
            }
        }
Пример #7
0
        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);
        }
Пример #9
0
        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;
        }
Пример #10
0
        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;
        }
Пример #11
0
        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();
        }
Пример #13
0
        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();
        }
Пример #14
0
        /// <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);
        }