- private void action()
- {
- // Local iconic variables
- HObject ho_Image, ho_Image1, ho_Image2, ho_Image3;
- HObject ho_Region, ho_RegionClosing, ho_Skeleton, ho_Contours;
- // Local control variables
- HTuple hv_Rows = new HTuple(), hv_Columns = new HTuple();
- HTuple hv_Width = new HTuple(), hv_Height = new HTuple();
- HTuple hv_WindowHandle = new HTuple();
- // Initialize local and output iconic variables
- HOperatorSet.GenEmptyObj(out ho_Image);
- HOperatorSet.GenEmptyObj(out ho_Image1);
- HOperatorSet.GenEmptyObj(out ho_Image2);
- HOperatorSet.GenEmptyObj(out ho_Image3);
- HOperatorSet.GenEmptyObj(out ho_Region);
- HOperatorSet.GenEmptyObj(out ho_RegionClosing);
- HOperatorSet.GenEmptyObj(out ho_Skeleton);
- HOperatorSet.GenEmptyObj(out ho_Contours);
- ho_Image.Dispose();
- HOperatorSet.ReadImage(out ho_Image, "C:/Users/admin/Desktop/q/检测.tif");
- ho_Image1.Dispose(); ho_Image2.Dispose(); ho_Image3.Dispose();
- HOperatorSet.Decompose3(ho_Image, out ho_Image1, out ho_Image2, out ho_Image3
- );
- if (HDevWindowStack.IsOpen())
- {
- HOperatorSet.DispObj(ho_Image2, HDevWindowStack.GetActive());
- }
- ho_Region.Dispose();
- HOperatorSet.Threshold(ho_Image2, out ho_Region, 128, 255);
- ho_RegionClosing.Dispose();
- HOperatorSet.ClosingCircle(ho_Region, out ho_RegionClosing, 17);
- ho_Skeleton.Dispose();
- HOperatorSet.Skeleton(ho_RegionClosing, out ho_Skeleton);
- ho_Contours.Dispose();
- HOperatorSet.GenContourRegionXld(ho_Skeleton, out ho_Contours, "center");
- hv_Rows.Dispose(); hv_Columns.Dispose();
- HOperatorSet.GetContourXld(ho_Contours, out hv_Rows, out hv_Columns);
- List<(double,double)> points = new List<(double,double)>();
- for (int i = 0; i < hv_Rows.Length; i++)
- {
- points.Add((hv_Columns.DArr[i], hv_Rows.DArr[i]));
- }
- var listWithoutDuplicates = points.Distinct().ToList();
- listWithoutDuplicates.Sort((a, b) => b.Item2.CompareTo(a.Item2));
- double max2row = 0;
- int index = 0;
- for (int i = 0; i < listWithoutDuplicates.Count; i++)
- {
- var d = listWithoutDuplicates[i].Item2;
- var count = listWithoutDuplicates.FindAll(x => x.Item2 == d).Count();
- if (count > 1)
- {
- if (max2row < d)
- {
- max2row = d;
- index = i;
- }
- }
- }
- HObject line;
- HOperatorSet.GenEmptyObj(out line);
- line.Dispose();
- var list1 = listWithoutDuplicates.FindAll(x => x.Item2 == listWithoutDuplicates[index].Item2);
- list1.Add(listWithoutDuplicates[0]);
- var row = list1.Select(x => x.Item2).ToArray();
- var col = list1.Select(x => x.Item1).ToArray();
- HOperatorSet.GenRegionPolygon(out line, new HTuple(row), new HTuple(col));
- hv_Width.Dispose(); hv_Height.Dispose();
- HOperatorSet.GetImageSize(ho_Image2, out hv_Width, out hv_Height);
- HOperatorSet.SetWindowAttr("background_color", "black");
- HOperatorSet.OpenWindow(0, 0, hv_Width / 4, hv_Height / 4, 0, "visible", "", out hv_WindowHandle);
- HDevWindowStack.Push(hv_WindowHandle);
- if (HDevWindowStack.IsOpen())
- {
- HOperatorSet.DispObj(ho_Image2, HDevWindowStack.GetActive());
- HOperatorSet.DispObj(line, HDevWindowStack.GetActive());
- }
- line.Dispose();
- ho_Image.Dispose();
- ho_Image1.Dispose();
- ho_Image2.Dispose();
- ho_Image3.Dispose();
- ho_Region.Dispose();
- ho_RegionClosing.Dispose();
- ho_Skeleton.Dispose();
- ho_Contours.Dispose();
- hv_Rows.Dispose();
- hv_Columns.Dispose();
- hv_Width.Dispose();
- hv_Height.Dispose();
- hv_WindowHandle.Dispose();
- }
复制代码 |