|
@@ -1,4 +1,6 @@
|
|
|
-using OTSCommon.Model;
|
|
|
+using OpenCvSharp;
|
|
|
+using OTSCommon.Model;
|
|
|
+using OTSModelSharp.ServiceInterface;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Data;
|
|
@@ -572,6 +574,166 @@ namespace OTSIncAReportApp.DataOperation.DataAccess
|
|
|
return DT;
|
|
|
}
|
|
|
|
|
|
+ public DataTable GetSegment(string fieldId, string xrayId)
|
|
|
+ {
|
|
|
+ string sqlp = @"select * from Segment where FieldId = " + fieldId + " and XRayId = " + xrayId + "";
|
|
|
+
|
|
|
+ DataTable DT = dbHelper.ExecuteDataTable(sqlp, null);
|
|
|
+ return DT;
|
|
|
+ }
|
|
|
+
|
|
|
+ public Mat GetBseImg(Mat mat1, Mat mat2, string overlap, int style)
|
|
|
+ {
|
|
|
+ CImageHandler cImageHandler = new CImageHandler();
|
|
|
+ if (style == 1)
|
|
|
+ {
|
|
|
+ return cImageHandler.StitchImageXGrid(int.Parse(overlap), 2, mat1, mat2);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return cImageHandler.StitchImageYGrid(int.Parse(overlap), 2, mat1, mat2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public Bitmap GetBitmapForBigCombin(string sub, double xs, string path, int picHeight, int picWidth, string leftOrRight, string downOrUp, string overlap)
|
|
|
+ {
|
|
|
+ string vs = "," + sub.Replace(':', '-') + ",";
|
|
|
+
|
|
|
+ DataTable dataTable = GetParticleAll(vs);
|
|
|
+ if (dataTable.Rows.Count == 0)
|
|
|
+ {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (dataTable.Rows.Count == 2)
|
|
|
+ {
|
|
|
+ string imagePath1 = path + "\\FIELD_FILES\\" + "Field" + dataTable.Rows[0]["fieldid"].ToString() + ".bmp";
|
|
|
+ DataRow item1 = dataTable.Rows[0];
|
|
|
+ Mat mat1 = new Mat(picHeight, picWidth, MatType.CV_8UC1, new Scalar(0));
|
|
|
+ Mat mat1_bse = new Mat(imagePath1, ImreadModes.Grayscale);
|
|
|
+ DataTable segmentList1 = GetSegment(item1["FieldId"].ToString(), item1["XrayId"].ToString());
|
|
|
+ foreach (DataRow item in segmentList1.Rows)
|
|
|
+ {
|
|
|
+ Cv2.Line(mat1, new OpenCvSharp.Point(Convert.ToInt64(item["Start"]), Convert.ToInt64(item["Height"])), new OpenCvSharp.Point(Convert.ToInt64(item["Start"]) + Convert.ToInt64(item["Length"]), Convert.ToInt64(item["Height"])), Scalar.White, 2, LineTypes.AntiAlias);
|
|
|
+ }
|
|
|
+
|
|
|
+ string imagePath2 = path + "\\FIELD_FILES\\" + "Field" + dataTable.Rows[1]["fieldid"].ToString() + ".bmp";
|
|
|
+ DataRow item2 = dataTable.Rows[1];
|
|
|
+ Mat mat2 = new Mat(picHeight, picWidth, MatType.CV_8UC1, new Scalar(0));
|
|
|
+ Mat mat2_bse = new Mat(imagePath2, ImreadModes.Grayscale);
|
|
|
+ DataTable segmentList2 = GetSegment(item2["FieldId"].ToString(), item2["XrayId"].ToString());
|
|
|
+ foreach (DataRow item in segmentList2.Rows)
|
|
|
+ {
|
|
|
+ Cv2.Line(mat2, new OpenCvSharp.Point(Convert.ToInt64(item["Start"]), Convert.ToInt64(item["Height"])), new OpenCvSharp.Point(Convert.ToInt64(item["Start"]) + Convert.ToInt64(item["Length"]), Convert.ToInt64(item["Height"])), Scalar.White, 2, LineTypes.AntiAlias);
|
|
|
+ }
|
|
|
+
|
|
|
+ Mat result = new Mat();
|
|
|
+ Mat result_bse = new Mat();
|
|
|
+ int style = -1;
|
|
|
+ overlap = "150";
|
|
|
+
|
|
|
+ if (item1["FieldPosX"] == item2["FieldPosX"])
|
|
|
+ {
|
|
|
+ style = 2;
|
|
|
+ if (Convert.ToInt64(item1["FieldPosY"]) > Convert.ToInt64(item2["FieldPosY"]))
|
|
|
+ {
|
|
|
+ if (downOrUp == "UP_TOWARD")//向上为正
|
|
|
+ {
|
|
|
+ Cv2.VConcat(mat2, mat1, result);
|
|
|
+ result_bse = GetBseImg(mat2_bse, mat1_bse, overlap, style);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Cv2.VConcat(mat1, mat2, result);
|
|
|
+ result_bse = GetBseImg(mat1_bse, mat2_bse, overlap, style);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (downOrUp == "UP_TOWARD")//向上为正
|
|
|
+ {
|
|
|
+ Cv2.VConcat(mat1, mat2, result);
|
|
|
+ result_bse = GetBseImg(mat1_bse, mat2_bse, overlap, style);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Cv2.VConcat(mat2, mat1, result);
|
|
|
+ result_bse = GetBseImg(mat2_bse, mat1_bse, overlap, style);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ else if(item1["FieldPosY"] == item2["FieldPosY"])
|
|
|
+ {
|
|
|
+ style = 1;
|
|
|
+ if (Convert.ToInt64(item1["FieldPosX"]) > Convert.ToInt64(item2["FieldPosX"]))
|
|
|
+ {
|
|
|
+ if (downOrUp == "RIGHT_TOWARD")//向右为正
|
|
|
+ {
|
|
|
+ Cv2.HConcat(mat1, mat2, result);
|
|
|
+ result_bse = GetBseImg(mat1_bse, mat2_bse, overlap, style);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Cv2.HConcat(mat2, mat1, result);
|
|
|
+ result_bse = GetBseImg(mat2_bse, mat1_bse, overlap, style);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (downOrUp == "RIGHT_TOWARD")//向右为正
|
|
|
+ {
|
|
|
+ Cv2.HConcat(mat2, mat1, result);
|
|
|
+ result_bse = GetBseImg(mat2_bse, mat1_bse, overlap, style);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Cv2.HConcat(mat1, mat2, result);
|
|
|
+ result_bse = GetBseImg(mat1_bse, mat2_bse, overlap, style);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ mat1_bse.Dispose();
|
|
|
+ mat2_bse.Dispose();
|
|
|
+
|
|
|
+ OpenCvSharp.Point[][] contours;
|
|
|
+ HierarchyIndex[] hierarchy;
|
|
|
+ Cv2.FindContours(result, out contours, out hierarchy, RetrievalModes.External, ContourApproximationModes.ApproxNone, null);
|
|
|
+ using (new Window("InputImage", WindowMode.Normal, result_bse))
|
|
|
+ {
|
|
|
+ Cv2.WaitKey(0);
|
|
|
+ }
|
|
|
+ if (contours.Count() == 1)
|
|
|
+ {
|
|
|
+ Rect minRect = Cv2.BoundingRect(contours[0]);//外接矩形
|
|
|
+ if (style == 1)
|
|
|
+ {
|
|
|
+ minRect.Y -= 20;
|
|
|
+ minRect.X -= int.Parse(overlap);
|
|
|
+ minRect.Width += int.Parse(overlap);
|
|
|
+ minRect.Height += 20;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ minRect.Y -= int.Parse(overlap);
|
|
|
+ minRect.X -= int.Parse(overlap);
|
|
|
+ minRect.Width += int.Parse(overlap);
|
|
|
+ minRect.Height += int.Parse(overlap);
|
|
|
+ }
|
|
|
+
|
|
|
+ result_bse = new Mat(result_bse, minRect);
|
|
|
+
|
|
|
+ return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(result_bse);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
public Bitmap GetBitmapForBig(string sub, double xs, string path,int picHeight,int picWidth)
|
|
|
{
|
|
|
string vs = "," + sub.Replace(':', '-') + ",";
|