Просмотр исходного кода

improve the algorithm of orientation

gsp 2 лет назад
Родитель
Сommit
c5b1d1c2bb
2 измененных файлов с 14 добавлено и 3 удалено
  1. 1 1
      OTSCPP/OTSData/XMLSerialization.h
  2. 13 2
      OTSCPP/OTSImagePro/OTSImageProcess.cpp

+ 1 - 1
OTSCPP/OTSData/XMLSerialization.h

@@ -172,7 +172,7 @@ serializable Rect
 	private:
 		void AssignValue(const CRect value, int shape = 1);
 	public:
-		xRect() { AssignValue(0); };
+		xRect() { CRect r(0,0,1,1); AssignValue(r); };
 		xRect(CRect value,int shape) { AssignValue(value,shape); };
 		CRect value();
 		xRect operator=(const CRect value) { AssignValue(value); return *this; };

+ 13 - 2
OTSCPP/OTSImagePro/OTSImageProcess.cpp

@@ -1772,7 +1772,7 @@ namespace OTSIMGPROC
 		Point2f p[4];
 		rRect.points(p);
 		int D_MIN =getDistance(p[0], p[1]);
-		int D_MinRecLen = 0;//minareaRect's length(the lenger side).
+		int D_MinRecLen = 0;//minareaRect's length(the longger side).
 		for (int j = 0; j <= 2; j++)
 		{
 			//line(cvContourImg, p[j], p[(j + 1) % 4], Scalar(100, 100, 0), 2);
@@ -1788,7 +1788,18 @@ namespace OTSIMGPROC
 		}
 
 		a_pOTSPart->SetDMin(D_MIN*a_PixelSize);
-		a_pOTSPart->SetOrientation(rRect.angle);
+
+		double angle;
+		if (rRect.size.width> rRect.size.height) // w > h
+		{
+			angle = abs(rRect.angle);
+		}
+		else
+		{
+			angle = 90.0 + abs(rRect.angle);
+		}
+			
+		a_pOTSPart->SetOrientation(angle);
 		//----------calculate the perimeter
 		double d = arcLength(listEdge, true);
 		a_pOTSPart->SetPerimeter(d*a_PixelSize);