modified: Program.cs

This commit is contained in:
Kq
2026-08-12 02:42:55 +02:00
parent d06229f957
commit 9e71bf3977
+48 -9
View File
@@ -6,6 +6,7 @@ using ZXing.Windows.Compatibility;
using ZXing.Common;
using System.Runtime.InteropServices;
using System.Drawing;
// using Emgu.CV.CvEnum;
namespace BarcodeReaderExample
@@ -21,7 +22,7 @@ namespace BarcodeReaderExample
camera.Set(VideoCaptureProperties.FrameWidth, 1280);
camera.Set(VideoCaptureProperties.FrameHeight, 720);
camera.Set(VideoCaptureProperties.Fps, 5);
camera.Set(VideoCaptureProperties.Fps, 60);
Mat hey = new Mat("photo.png");
@@ -61,10 +62,35 @@ namespace BarcodeReaderExample
// Cv2.Circle(frame, (int)pos1[0], (int)pos1[1], 5, Scalar.Red, 2);
// Cv2.Circle(frame, (int)pos2[0], (int)pos2[1], 5, Scalar.Green, 2);
// Cv2.Circle(frame, (int)pos3[0], (int)pos3[1], 5, Scalar.Blue, 2);
PointF[] location;
try
{
location = Calculate(pos1, pos2, pos3, new float[2] { points[3].X, points[3].Y });
}
catch
{
continue;
}
// DrawLine(location);
Calculate(pos1, pos2, pos3, new float[2] { points[3].X, points[3].Y });
var points1 = new List<OpenCvSharp.Point>
{
GetPoint(location[0]),
GetPoint(location[1]),
GetPoint(location[3]),
GetPoint(location[2])
};
// Zagnieźdź w dodatkową kolekcję:
IEnumerable<IEnumerable<OpenCvSharp.Point>> contours = new[] { points1 };
Cv2.FillPoly(frame, contours, Scalar.White);
Cv2.PutText(frame, result.Text, new OpenCvSharp.Point((int)(pos2[0]-pos3[0])/2+(int)pos3[0]-160, (int)(pos2[1]-pos3[1])/2+(int)pos3[1]+60), HersheyFonts.HersheySimplex, 0.8, Scalar.Black, 2);
// Cv2.Circle(frame, (int)(RightBottomX), (int)(RightBottomY), 5, Scalar.Green, 2);
@@ -74,12 +100,13 @@ namespace BarcodeReaderExample
// frame.SaveImage($"photos/photo_{photocount}.png");
// photocount++;
Cv2.ImShow("Camera preview", frame);
Thread.Sleep(1000 / 24);
// Thread.Sleep(1000 / 24);
// Console.WriteLine("tick");
int key = Cv2.WaitKey(1);
if (key == 27 || key == 'q')
@@ -89,7 +116,11 @@ namespace BarcodeReaderExample
Cv2.DestroyAllWindows();
}
static void Calculate(float[] pos1, float[] pos2, float[] pos3, float[] pos4)
static OpenCvSharp.Point GetPoint(PointF pointf)
{
return new OpenCvSharp.Point(pointf.X,pointf.Y);
}
static PointF[] Calculate(float[] pos1, float[] pos2, float[] pos3, float[] pos4)
{
// Your 4 detected points (change the names if needed)
PointF p1 = new PointF(pos1[0], pos1[1]);
@@ -125,18 +156,26 @@ PointF topLeft = Expand(p3); // change order if needed
PointF topRight = Expand(p2);
PointF bottomRight = ExpandLB(p4);
PointF bottomLeft = Expand(p1);
PointF[] Location = new PointF[] {topLeft,topRight,bottomLeft,bottomRight};
return Location;
// 4. Now draw the 4 lines
// Example with System.Drawing or Unity or whatever you use:
DrawLine(topLeft, topRight);
DrawLine(topRight, bottomRight);
DrawLine(bottomRight, bottomLeft);
DrawLine(bottomLeft, topLeft);
}
static void DrawLine(PointF p1, PointF p2)
{
Cv2.Line(frame, (int)p1.X, (int)p1.Y, (int)p2.X, (int)p2.Y, Scalar.Red, 2);
}
static void DrawLine(PointF[] Location)
{
DrawLine(Location[0], Location[1]);
DrawLine(Location[1], Location[2]);
DrawLine(Location[2], Location[3]);
DrawLine(Location[3], Location[0]);
}
static void DrawLine(float x1, float y1, float x2, float y2)
{