Browse Source

Minor optimization using Span.

pull/768/merge
Canming Huang 1 year ago
parent
commit
1f17a18600
  1. 7
      Emgu.CV.Models/Dnn/DetectedObject.cs
  2. 4
      Emgu.CV.Models/Dnn/SceneTextDetector.cs
  3. 4
      Emgu.CV.OCR/Tesseract.cs
  4. 3
      Emgu.CV.Platform/Emgu.CV.Bitmap/BitmapExtension.cs
  5. 4
      Emgu.CV/Imgproc/Subdiv2D.cs
  6. 5
      Emgu.CV/Objdetect/HOGDescriptor.cs

7
Emgu.CV.Models/Dnn/DetectedObject.cs

@ -123,9 +123,16 @@ namespace Emgu.CV.Models
regions,
confThreshold,
nmsThreshold);
#if UNSAFE_ALLOWED
var classIdArr = classIds.GetSpan();
var confidentArr = confidents.GetSpan();
var regionArr = regions.GetSpan();
#else
var classIdArr = classIds.ToArray();
var confidentArr = confidents.ToArray();
var regionArr = regions.ToArray();
#endif
List<DetectedObject> results = new List<DetectedObject>();
for (int i = 0; i < classIdArr.Length; i++)
{

4
Emgu.CV.Models/Dnn/SceneTextDetector.cs

@ -232,7 +232,11 @@ namespace Emgu.CV.Models
_textDetector.Detect(image, vvp, confidents);
Point[][] detectionResults = vvp.ToArrayOfArray();
#if UNSAFE_ALLOWED
var confidentResult = confidents.GetSpan();
#else
float[] confidentResult = confidents.ToArray();
#endif
List<DetectedObject> results = new List<DetectedObject>();
for (int i = 0; i < detectionResults.Length; i++)
{

4
Emgu.CV.OCR/Tesseract.cs

@ -503,7 +503,11 @@ namespace Emgu.CV.OCR
OcrInvoke.cveTessBaseAPIExtractResult(_ptr, textSeq, results);
byte[] bytes = textSeq.ToArray();
#if UNSAFE_ALLOWED
var trs = results.GetSpan();
#else
TesseractResult[] trs = results.ToArray();
#endif
Word[] res = new Word[trs.Length];
int idx = 0;

3
Emgu.CV.Platform/Emgu.CV.Bitmap/BitmapExtension.cs

@ -813,8 +813,7 @@ namespace Emgu.CV
Bitmap result = new Bitmap(s.Width, s.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
System.Drawing.Imaging.BitmapData data = result.LockBits(new Rectangle(Point.Empty, result.Size),
System.Drawing.Imaging.ImageLockMode.WriteOnly, result.PixelFormat);
using (Image<TColor, TDepth> tmp = new Image<TColor, TDepth>(s.Width, s.Height, data.Stride, data.Scan0)
)
using (Image<TColor, TDepth> tmp = new Image<TColor, TDepth>(s.Width, s.Height, data.Stride, data.Scan0))
{
cudaImage.Download(tmp);
}

4
Emgu.CV/Imgproc/Subdiv2D.cs

@ -124,7 +124,11 @@ namespace Emgu.CV
CvInvoke.cveSubdiv2DGetVoronoiFacetList(_ptr, vi, facetVec, centerVec);
PointF[][] vertices = facetVec.ToArrayOfArray();
#if UNSAFE_ALLOWED
var centers = centerVec.GetSpan();
#else
PointF[] centers = centerVec.ToArray();
#endif
VoronoiFacet[] facets = new VoronoiFacet[centers.Length];
for (int i = 0; i < facets.Length; i++)

5
Emgu.CV/Objdetect/HOGDescriptor.cs

@ -114,8 +114,13 @@ namespace Emgu.CV
{
ObjdetectInvoke.cveHOGDescriptorDetectMultiScale(_ptr, iaImage, vr, vd, hitThreshold, ref winStride, ref padding, scale,
finalThreshold, useMeanshiftGrouping);
#if UNSAFE_ALLOWED
var location = vr.GetSpan();
var weight = vd.GetSpan();
#else
Rectangle[] location = vr.ToArray();
double[] weight = vd.ToArray();
#endif
MCvObjectDetection[] result = new MCvObjectDetection[location.Length];
for (int i = 0; i < result.Length; i++)
{

Loading…
Cancel
Save