From ca15420f4ded8f128343390c650fda535994dab7 Mon Sep 17 00:00:00 2001
From: C3032 <C3032@BC3032>
Date: 星期一, 29 十二月 2025 08:44:50 +0800
Subject: [PATCH] Merge branch 'master' into feature/HR_Camera
---
LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithm.cs | 286 ++++++++++++++++++++++++++++++++++++---------------------
1 files changed, 180 insertions(+), 106 deletions(-)
diff --git a/LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithm.cs b/LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithm.cs
index 0c95831..919f3bd 100644
--- a/LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithm.cs
+++ b/LB_VisionProcesses/Alogrithms/BaseAlgorithm/TAlgorithm.cs
@@ -64,7 +64,7 @@
{
if (InputImage is Bitmap)
{
- TAlgorithm.Bitmap2Mat((Bitmap)InputImage, out Mat src);
+ Bitmap2Mat((Bitmap)InputImage, out Mat src);
if (Params.Fixture == null)
Params.Fixture = new Fixture();
@@ -96,7 +96,7 @@
// 4. 鍒涘缓涓庡師鍥惧ぇ灏忕浉鍚岀殑Mat锛屽苟鍒濆鍖栨棤鏁堝��
image = new Mat(src.Size(), src.Type());
- ((Mat)image).SetTo(TAlgorithm.GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
+ ((Mat)image).SetTo(GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
// 5. 鍒涘缓閬僵锛氬湪result涓婄粯鍒舵棆杞煩褰紙鐧借壊濉厖锛�
using (Mat cropped = new Mat(src, boundingRect))
@@ -113,7 +113,7 @@
// 2. 鍒涘缓涓庡師鍥惧ぇ灏忕浉鍚岀殑Mat锛屽苟鍒濆鍖栨棤鏁堝��
image = new Mat(src.Size(), src.Type());
- ((Mat)image).SetTo(TAlgorithm.GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
+ ((Mat)image).SetTo(GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
// 3. 鍒涘缓鍦嗗舰閬僵
using (Mat mask = Mat.Zeros(src.Rows, src.Cols, MatType.CV_8UC1))
@@ -127,39 +127,8 @@
image = ((Bitmap)InputImage)?.Clone();
return true;
}
- TAlgorithm.Mat2Bitmap((Mat)image, out Bitmap bmp);
+ Mat2Bitmap((Mat)image, out Bitmap bmp);
image = bmp;
- return true;
- }
- else if (InputImage is HObject ho_image)
- {
- if (!ho_image.IsInitialized())
- return false;
-
- if (Params.Fixture == null)
- Params.Fixture = new Fixture();
-
- HObject hoDomainImage = null;
-
- switch (Params.ROI?.GetType().Name)
- {
- case "HRectangle2":
- HOperatorSet.GenRectangle2(out HObject hRectangle2, (HTuple)(Params.ROI.Row + Params.Fixture.Row), (HTuple)(Params.ROI.Column + Params.Fixture.Column)
- , (HTuple)(Params.ROI.Phi + Params.Fixture.Phi), (HTuple)((HRectangle2)Params.ROI).SemiLength1, (HTuple)((HRectangle2)Params.ROI).SemiLength2);
- HOperatorSet.ReduceDomain(ho_image, hRectangle2, out hoDomainImage);
- break;
- case "HCircle":
- HOperatorSet.GenCircle(out HObject hCircle, (HTuple)(Params.ROI.Row + Params.Fixture.Row), (HTuple)(Params.ROI.Column + Params.Fixture.Column)
- , (HTuple)((HCircle)Params.ROI).Radius);
- HOperatorSet.ReduceDomain(ho_image, hCircle, out hoDomainImage);
- break;
- case "ROI":
- default:
- image = ho_image.CopyObj(1, -1);
- return true;
- }
-
- image = hoDomainImage;
return true;
}
else if (InputImage is Mat)
@@ -193,7 +162,7 @@
// 4. 鍒涘缓涓庡師鍥惧ぇ灏忕浉鍚岀殑Mat锛屽苟鍒濆鍖栨棤鏁堝��
image = new Mat(src.Size(), src.Type());
- ((Mat)image).SetTo(TAlgorithm.GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
+ ((Mat)image).SetTo(GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
// 5. 鍒涘缓閬僵锛氬湪result涓婄粯鍒舵棆杞煩褰紙鐧借壊濉厖锛�
using (Mat cropped = new Mat(src, boundingRect))
@@ -210,7 +179,7 @@
// 2. 鍒涘缓涓庡師鍥惧ぇ灏忕浉鍚岀殑Mat锛屽苟鍒濆鍖栨棤鏁堝��
image = new Mat(src.Size(), src.Type());
- ((Mat)image).SetTo(TAlgorithm.GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
+ ((Mat)image).SetTo(GetInvalidValueForMat(src)); // 鍏ㄩ儴鍒濆鍖栦负鏃犳晥鍊�
// 3. 鍒涘缓鍦嗗舰閬僵
using (Mat mask = Mat.Zeros(src.Rows, src.Cols, MatType.CV_8UC1))
@@ -244,32 +213,112 @@
}
}
+ public virtual bool ReduceDomainImage(object InputImage, ref HImage image)
+ {
+ image = null;
+ if (InputImage == null)
+ {
+ image = null;
+ Msg = "杈撳叆鍥剧墖涓虹┖";
+ Result = false;
+ return false;
+ }
+
+ lock (InputImage)
+ {
+ try
+ {
+ if (InputImage is HImage ho_image)
+ {
+ if (!ho_image.IsInitialized())
+ return false;
+
+ if (Params.Fixture == null)
+ Params.Fixture = new Fixture();
+
+ HImage hoDomainImage = null;
+
+ switch (Params.ROI?.GetType().Name)
+ {
+ case "HRectangle2":
+ using (HRegion hRectangle2 = new HRegion())
+ {
+ hRectangle2.GenRectangle2((HTuple)(Params.ROI.Row + Params.Fixture.Row), (HTuple)(Params.ROI.Column + Params.Fixture.Column)
+ , (HTuple)(Params.ROI.Phi + Params.Fixture.Phi), (HTuple)((HRectangle2)Params.ROI).SemiLength1, (HTuple)((HRectangle2)Params.ROI).SemiLength2);
+ hoDomainImage = ho_image.ReduceDomain(hRectangle2);
+ }
+ break;
+ case "HCircle":
+ using (HRegion hCircle = new HRegion())
+ {
+ hCircle.GenCircle((HTuple)(Params.ROI.Row + Params.Fixture.Row), (HTuple)(Params.ROI.Column + Params.Fixture.Column)
+ , (HTuple)((HCircle)Params.ROI).Radius);
+ hoDomainImage = ho_image.ReduceDomain(hCircle);
+ }
+ break;
+ case "ROI":
+ default:
+ image = ho_image.CopyObj(1, -1);
+ return true;
+ }
+
+ image = hoDomainImage;
+ return true;
+ }
+ else
+ {
+ image = null;
+ Msg = $"杈撳叆鏍煎紡涓嶆纭畕InputImage.GetType()}";
+ Result = false;
+ return false;
+ }
+ }
+ catch (Exception ex)
+ {
+ image = null;
+ Msg = $"瑁佸壀鍖哄煙澶辫触,鍘熷洜鏄�:{ex.ToString()}";
+ Result = false;
+ return false;
+ }
+ }
+ }
+
+
public override void Dispose()
{
if (InputImage != null)
{
if (InputImage is HObject)
+ {
((HObject)InputImage).Dispose();
+ }
else if (InputImage is Mat)
+ {
((Mat)InputImage).Dispose();
+ }
else if (InputImage is Bitmap)
+ {
((Bitmap)InputImage).Dispose();
-
+ }
InputImage = null;
}
if (OutputImage != null)
{
if (OutputImage is HObject)
+ {
((HObject)OutputImage).Dispose();
+ }
else if (OutputImage is Mat)
+ {
((Mat)OutputImage).Dispose();
+ }
else if (OutputImage is Bitmap)
+ {
((Bitmap)OutputImage).Dispose();
-
+ }
OutputImage = null;
}
-
if (Record != null)
{
Record.Dispose();
@@ -287,13 +336,18 @@
if (InputImage != null)
{
if (InputImage is HObject ho_image && ho_image.IsInitialized())
+ {
obj.InputImage = ho_image.CopyObj(1, -1);
+ }
else if (InputImage is Mat mat && !mat.Empty())
+ {
obj.InputImage = mat.Clone();
+ }
else if (InputImage is Bitmap bitmap)
+ {
obj.InputImage = bitmap.Clone();
+ }
}
-
return obj;
}
catch { return (TAlgorithm)MemberwiseClone(); }
@@ -303,17 +357,32 @@
{
Result = true;
bCompleted = false;
- Msg = "";
- OutputImage = null;
-
+ Msg = string.Empty;
+ //if (InputImage != null)
+ //{
+ // if (InputImage is HObject)
+ // {
+ // ((HObject)InputImage).Dispose();
+ // }
+ // else if (InputImage is Mat)
+ // {
+ // ((Mat)InputImage).Dispose();
+ // }
+ // else if (InputImage is Bitmap)
+ // {
+ // ((Bitmap)InputImage).Dispose();
+ // }
+ // InputImage = null;
+ //}
if (Record != null)
+ {
Record.Dispose();
+ }
}
public override bool Run()
{
DateTime StartTime = DateTime.Now;
-
InitRunParams();
HOperatorSet.GenEmptyObj(out HObject EmptyObj);
OutputImage = EmptyObj;
@@ -331,7 +400,6 @@
Thread.Sleep(30);
}
-
Msg = "杩愯瓒呮椂";
Result = false;
RunTime = (DateTime.Now - StartTime).TotalMilliseconds;
@@ -357,8 +425,9 @@
try
{
if (string.IsNullOrEmpty(fullPath))
+ {
return false;
-
+ }
if (!fullPath.Contains(".json"))
{
Debug.WriteLine("鏂囦欢璺緞涓嶅畬鏁�");
@@ -369,7 +438,6 @@
Debug.WriteLine("鏂囦欢璺緞涓嶅畬鏁�");
return false;
}
-
// 鑾峰彇涓嶅甫鏂囦欢鍚嶇殑鐩綍璺緞
string directoryPath = Path.GetDirectoryName(fullPath);
strProcessName = Path.GetFileNameWithoutExtension(fullPath);
@@ -380,7 +448,6 @@
Save(directoryPath);
return true;
}
-
string strJson = string.Empty;
using (StreamReader streamReader = new StreamReader(fullPath, Encoding.UTF8))
{
@@ -389,8 +456,9 @@
}
Params = JsonConvert.DeserializeObject<ProcessParams>(strJson);
if (Params == null)
+ {
return false;
-
+ }
Params.FixDeserializedData();
return true;
}
@@ -453,20 +521,20 @@
return value;
}
- public static void Bitmap2HObject(Bitmap bmp, out HObject image)
+ public static HImage Bitmap2HObject(Bitmap bmp)
{
BitmapData srcBmpData;
-
+ HImage image = null;
try
{
- if (bmp == null || bmp.Width == 0 || bmp.Height == 0)
+ if (bmp.Tag != null && bmp == null || bmp.Width == 0 || bmp.Height == 0)
{
image = null;
- return;
+ return image;
}
-
lock (bmp)
{
+ image = new HImage();
switch (bmp.PixelFormat)
{
case PixelFormat.Format24bppRgb:
@@ -475,35 +543,41 @@
int width = bmp.Width;
int height = bmp.Height;
int stride = srcBmpData.Stride;
-
if (stride == width * 3)
- HOperatorSet.GenImageInterleaved(out image, srcBmpData.Scan0, "bgr", bmp.Width, bmp.Height, 0, "byte", 0, 0, 0, 0, -1, 0);
+ {
+ image.GenImageInterleaved(srcBmpData.Scan0, "bgr", bmp.Width, bmp.Height, 0, "byte", 0, 0, 0, 0, -1, 0);
+ }
else
+ {
image = HandleStrideAlignmentBest(srcBmpData.Scan0, width, height, stride);
-
+ }
bmp.UnlockBits(srcBmpData);
break;
default:
srcBmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format8bppIndexed);
- HOperatorSet.GenImage1(out image, "byte", bmp.Width, bmp.Height, srcBmpData.Scan0);
+ image.GenImage1("byte", bmp.Width, bmp.Height, srcBmpData.Scan0);
bmp.UnlockBits(srcBmpData);
break;
}
}
- return;
+ return image;
}
catch
{
+ if (image != null)
+ {
+ image.Dispose();
+ }
image = null;
- return;
+ return image;
}
}
- private static HObject HandleStrideAlignmentBest(IntPtr scan0, int width, int height, int stride)
+ private static HImage HandleStrideAlignmentBest(IntPtr scan0, int width, int height, int stride)
{
int expectedStride = width * 3;
byte[] alignedData = new byte[width * height * 3];
-
+ HImage image = new HImage();
unsafe
{
byte* srcPtr = (byte*)scan0;
@@ -521,31 +595,31 @@
expectedStride
);
}
- HOperatorSet.GenImageInterleaved(out HObject ho_img, new IntPtr(dstPtr), "bgr", width, height, 0, "byte", width, height, 0, 0, -1, 0);
- return ho_img;
+ image.GenImageInterleaved(new IntPtr(dstPtr), "bgr", width, height, 0, "byte", width, height, 0, 0, -1, 0);
+ return image;
}
}
}
- public static unsafe void HObject2Bitmap(HObject hObject, out Bitmap bmp)
+ public static unsafe void HObject2Bitmap(HImage hImage, out Bitmap bmp)
{
try
{
- if (hObject == null || !hObject.IsInitialized())
+ if (hImage == null || !hImage.IsInitialized())
{
bmp = null;
return;
}
// 鑾峰彇鍥惧儚淇℃伅
- HOperatorSet.GetImageSize(hObject, out HTuple width, out HTuple height);
- HOperatorSet.CountChannels(hObject, out HTuple channels);
+ hImage.GetImageSize(out HTuple width, out HTuple height);
+ HTuple channels = hImage.CountChannels();
if (channels.I == 1)
{
// 鐏板害鍥惧鐞�
HTuple ptr, type;
- HOperatorSet.GetImagePointer1(hObject, out ptr, out type, out width, out height);
+ ptr = hImage.GetImagePointer1(out type, out width, out height);
bmp = new Bitmap(width, height, PixelFormat.Format8bppIndexed);
@@ -574,7 +648,7 @@
{
// 褰╄壊鍥惧鐞嗭紙BGR椤哄簭锛�
HTuple ptrR, ptrG, ptrB, type;
- HOperatorSet.GetImagePointer3(hObject, out ptrR, out ptrG, out ptrB, out type, out width, out height);
+ hImage.GetImagePointer3(out ptrR, out ptrG, out ptrB, out type, out width, out height);
bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
BitmapData bmpData = bmp.LockBits(
@@ -611,20 +685,20 @@
}
}
- public static void Mat2HObject(Mat mat, out HObject image)
+ public static HImage Mat2HObject(Mat mat)
{
+ HImage image = null;
try
{
if (mat == null || mat.Empty())
{
- image = null;
- return;
+ return image;
}
if (mat.Type() == MatType.CV_8UC3) // 褰╄壊鍥惧儚 (BGR)
{
- HOperatorSet.GenImageInterleaved(
- out image,
+ image = new HImage();
+ image.GenImageInterleaved(
mat.Data,
"bgr",
mat.Width,
@@ -635,8 +709,8 @@
}
else if (mat.Type() == MatType.CV_8UC1) // 鐏板害鍥惧儚
{
- HOperatorSet.GenImage1(
- out image,
+ image = new HImage();
+ image.GenImage1(
"byte",
mat.Width,
mat.Height,
@@ -646,12 +720,12 @@
{
throw new ArgumentException($"Mat2HObject涓嶆敮鎸佺殑鍥惧儚鏍煎紡锛歿mat.Type()}");
}
- return;
+ return image;
}
catch
{
image = null;
- return;
+ return image;
}
}
@@ -1251,7 +1325,7 @@
/// <param name="startPoint"></param>
/// <param name="endPoint"></param>
/// <returns></returns>
- public static double GetDistanceP2P(HPoint startPoint, HPoint endPoint)
+ public double GetDistanceP2P(HPoint startPoint, HPoint endPoint)
{
try
{
@@ -1260,12 +1334,12 @@
catch { return 9994; }
}
- public static double GetDistanceP2P(Point startPoint, Point endPoint)
+ public double GetDistanceP2P(Point startPoint, Point endPoint)
{
return GetDistanceP2P(new HPoint(startPoint), new HPoint(endPoint));
}
- public static double DistanceP2P(double startX, double startY, double endX, double endY)
+ public double DistanceP2P(double startX, double startY, double endX, double endY)
{
return GetDistanceP2P(new HPoint(startX, startY), new HPoint(endX, endY));
}
@@ -1276,17 +1350,17 @@
/// <param name="startPoint"></param>
/// <param name="endPoint"></param>
/// <returns></returns>
- public static HPoint GetMidPoint(HPoint startPoint, HPoint endPoint)
+ public HPoint GetMidPoint(HPoint startPoint, HPoint endPoint)
{
return new HPoint((startPoint.X + endPoint.X) / 2, (startPoint.Y + endPoint.Y) / 2);
}
- public static Point GetMidPoint(Point startPoint, Point endPoint)
+ public Point GetMidPoint(Point startPoint, Point endPoint)
{
return new Point((startPoint.X + endPoint.X) / 2, (startPoint.Y + endPoint.Y) / 2);
}
- public static System.Drawing.Point GetMidPoint(System.Drawing.Point startPoint, System.Drawing.Point endPoint)
+ public System.Drawing.Point GetMidPoint(System.Drawing.Point startPoint, System.Drawing.Point endPoint)
{
return new System.Drawing.Point((startPoint.X + endPoint.X) / 2, (startPoint.Y + endPoint.Y) / 2);
}
@@ -1297,7 +1371,7 @@
/// <param name="point"></param>
/// <param name="segment"></param>
/// <returns></returns>
- public static bool IsPointOnSegment(HPoint pt, HSegment segment, double tolerance = 1e-3)
+ public bool IsPointOnSegment(HPoint pt, HSegment segment, double tolerance = 1e-3)
{
// 璁$畻鐩寸嚎鏂圭▼鐨勭郴鏁�
double A = segment.EndY - segment.StartX;
@@ -1320,7 +1394,7 @@
return false;
}
- public static bool IsPointOnSegment(double px, double py, double x1, double y1, double x2, double y2)
+ public bool IsPointOnSegment(double px, double py, double x1, double y1, double x2, double y2)
{
return IsPointOnSegment(new HPoint(px, py), new HSegment(x1, y1, x2, y2));
}
@@ -1345,7 +1419,7 @@
catch { return false; }
}
- public static bool IsPointNearRectangleSilde(HPoint pt, HRectangle2 rect, double tolerance = 100)
+ public bool IsPointNearRectangleSilde(HPoint pt, HRectangle2 rect, double tolerance = 100)
{
return IsPointNearRectangleSilde(new System.Drawing.Point((int)pt.X, (int)pt.Y), new Rectangle((int)rect.X, (int)rect.Y, (int)rect.Width, (int)rect.Height), tolerance);
}
@@ -1357,21 +1431,21 @@
/// <param name="pt2"></param>
/// <param name="tolerance"></param>
/// <returns></returns>
- public static bool IsPointNearPoint(HPoint pt1, HPoint pt2, double tolerance = 100)
+ public bool IsPointNearPoint(HPoint pt1, HPoint pt2, double tolerance = 100)
{
if (GetDistanceP2P(pt1, pt2) <= tolerance)
return true;
return false;
}
- public static bool IsPointNearPoint(Point pt1, Point pt2, double tolerance = 100)
+ public bool IsPointNearPoint(Point pt1, Point pt2, double tolerance = 100)
{
if (GetDistanceP2P(pt1, pt2) <= tolerance)
return true;
return false;
}
- public static bool IsPointNearPoint(double x1, double y1, double x2, double y2, int tolerance = 100)
+ public bool IsPointNearPoint(double x1, double y1, double x2, double y2, int tolerance = 100)
{
return IsPointNearPoint(new HPoint(x1, y1), new HPoint(x2, y2), tolerance);
}
@@ -1384,7 +1458,7 @@
/// <param name="corner"></param>
/// <param name="tolerance"></param>
/// <returns></returns>
- public static bool IsPointNearRectangleCorner(Point pt, Rectangle rect, out string corner, double tolerance = 10)
+ public bool IsPointNearRectangleCorner(Point pt, Rectangle rect, out string corner, double tolerance = 10)
{
try
{
@@ -1423,7 +1497,7 @@
catch { corner = ""; return false; }
}
- public static bool IsPointNearRectangleCorner(HPoint pt, HRectangle2 rect, out string corner, double tolerance = 10)
+ public bool IsPointNearRectangleCorner(HPoint pt, HRectangle2 rect, out string corner, double tolerance = 10)
{
try
{
@@ -1471,7 +1545,7 @@
/// <param name="p3">绾�2璧峰鐐�</param>
/// <param name="p4"></param>
/// <returns></returns>
- public static Point2d? GetLineIntersection(Point2d p1, Point2d p2, Point2d p3, Point2d p4, bool bOnSegment = false)
+ public Point2d? GetLineIntersection(Point2d p1, Point2d p2, Point2d p3, Point2d p4, bool bOnSegment = false)
{
// 鐩寸嚎1鐨勫悜閲�
double x1 = p1.X, y1 = p1.Y;
@@ -1508,7 +1582,7 @@
#region Halcon
// Chapter: Graphics / Output
// Short Description: Display 3D object models
- public static void visualize_object_model_3d(HTuple hv_WindowHandle, HTuple hv_ObjectModel3D,
+ public void visualize_object_model_3d(HTuple hv_WindowHandle, HTuple hv_ObjectModel3D,
HTuple hv_CamParam, HTuple hv_PoseIn, HTuple hv_GenParamName, HTuple hv_GenParamValue,
HTuple hv_Title, HTuple hv_Label, HTuple hv_Information, out HTuple hv_PoseOut)
{
@@ -3236,7 +3310,7 @@
// Chapter: Calibration / Camera Parameters
// Short Description: Set the value of a specified camera parameter in the camera parameter tuple.
- public static void set_cam_par_data(HTuple hv_CameraParamIn, HTuple hv_ParamName, HTuple hv_ParamValue,
+ public void set_cam_par_data(HTuple hv_CameraParamIn, HTuple hv_ParamName, HTuple hv_ParamValue,
out HTuple hv_CameraParamOut)
{
// Local iconic variables
@@ -3340,7 +3414,7 @@
}
}
- public static void gen_arrow_contour_xld(out HObject ho_Arrow, HTuple hv_Row1, HTuple hv_Column1,
+ public void gen_arrow_contour_xld(out HObject ho_Arrow, HTuple hv_Row1, HTuple hv_Column1,
HTuple hv_Row2, HTuple hv_Column2, HTuple hv_HeadLength, HTuple hv_HeadWidth)
{
// Stack for temporary objects
@@ -3514,7 +3588,7 @@
}
}
- public static void get_rect2_vertex(HTuple hv_Row, HTuple hv_Column, HTuple hv_Phi, HTuple hv_Length1,
+ public void get_rect2_vertex(HTuple hv_Row, HTuple hv_Column, HTuple hv_Phi, HTuple hv_Length1,
HTuple hv_Length2, out HTuple hv_TopLeft_Row, out HTuple hv_TopLeft_Col, out HTuple hv_TopRight_Row,
out HTuple hv_TopRight_Col, out HTuple hv_LowLeft_Row, out HTuple hv_LowLeft_Col,
out HTuple hv_LowRight_Row, out HTuple hv_LowRight_Col)
@@ -3721,7 +3795,7 @@
}
}
- public static void pts_to_best_line(out HObject ho_LineXld, HTuple hv_Rows, HTuple hv_Columns,
+ public void pts_to_best_line(out HObject ho_LineXld, HTuple hv_Rows, HTuple hv_Columns,
HTuple hv_IgnoreNum, out HTuple hv_Row1, out HTuple hv_Column1, out HTuple hv_Row2,
out HTuple hv_Column2)
{
@@ -3807,7 +3881,7 @@
}
}
- public static (double, double) CalculateTailValues(HTuple minValue, HTuple maxValue, HTuple mean, HTuple deviation, double tailPercentage = 0.3)
+ public (double, double) CalculateTailValues(HTuple minValue, HTuple maxValue, HTuple mean, HTuple deviation, double tailPercentage = 0.3)
{
// 璁$畻浣庡熬鐏板害鍊�
double lowTailValue = minValue.TupleReal() + (mean.TupleReal() - minValue.TupleReal()) * tailPercentage;
@@ -3840,7 +3914,7 @@
/// <param name="hv_Column2">缁撴潫妯潗鏍�</param>
/// <param name="hv_ResultRow">缁撴灉鐐归泦鍚堢旱鍧愭爣</param>
/// <param name="hv_ResultColumn">缁撴灉鐐归泦鍚堟í鍧愭爣</param>
- public static void Rake(HObject ho_Image, out HObject ho_Regions, HTuple hv_Elements,
+ public void Rake(HObject ho_Image, out HObject ho_Regions, HTuple hv_Elements,
HTuple hv_DetectHeight, HTuple hv_DetectWidth, HTuple hv_Sigma, HTuple hv_Threshold,
HTuple hv_Transition, HTuple hv_Select, HTuple hv_Row1, HTuple hv_Column1, HTuple hv_Row2,
HTuple hv_Column2, out HTuple hv_ResultRow, out HTuple hv_ResultColumn)
@@ -5036,7 +5110,7 @@
catch { }
}
- public static void scale_gray_map(HObject ho_Image, out HObject ho_Image1, HTuple hv_Min, HTuple hv_Max)
+ public void scale_gray_map(HObject ho_Image, out HObject ho_Image1, HTuple hv_Min, HTuple hv_Max)
{
HTuple hv_Mult = new HTuple(), hv_Add = new HTuple();
HOperatorSet.GenEmptyObj(out ho_Image1);
@@ -5123,7 +5197,7 @@
#region OpenCVSharp
// 鏍规嵁Mat绫诲瀷杩斿洖瀵瑰簲鐨勬棤鏁堝��
- public static Scalar GetInvalidValueForMat(Mat mat)
+ public Scalar GetInvalidValueForMat(Mat mat)
{
MatType type = mat.Type();
if (type == MatType.CV_8UC1 || type == MatType.CV_8UC3)
@@ -5136,7 +5210,7 @@
return new Scalar(0); // 瀵逛簬8浣嶆棤绗﹀彿绫诲瀷锛�0鏄畨鍏ㄧ殑鏃犳晥鍊�
}
- public static void RGB2XYZ(double sR, double sG, double sB, out double X, out double Y, out double Z)
+ public void RGB2XYZ(double sR, double sG, double sB, out double X, out double Y, out double Z)
{
// 杈撳叆鐨勯鑹插�� (sR, sG, sB) 搴斾负 0 鍒� 255 涔嬮棿鐨勫��
@@ -5167,7 +5241,7 @@
Z = Math.Round(var_Z / (var_X + var_Y + var_Z), 3);
}
- public static void ExtractFrames(string videoPath, string outputDir)
+ public void ExtractFrames(string videoPath, string outputDir)
{
// 妫�鏌ヨ棰戞枃浠舵槸鍚﹀瓨鍦�
if (!File.Exists(videoPath))
--
Gitblit v1.9.3