vector<vector<Point>> vec_point;
vector<Vec4i> hireachy;
findContours(img_canny1, vec_point, hireachy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));
//绘制轮廓
img3 = Mat::zeros(img1.size(),CV_8UC1);
float maxw = 0;
float maxh = 0;
double degree = 0;

for (size_t t=0;t<vec_point.size();t++)
{
  RotatedRect minRect = minAreaRect(vec_point[t]);
  degree = abs(minRect.angle);
  if (degree>0)
  {
    maxw = max(maxw,minRect.size.width);
    maxh = max(maxh,minRect.size.height);
  }
}

for (size_t t=0;t<vec_point.size();t++)
{
  RotatedRect minRect = minAreaRect(vec_point[t]);
  if (maxw ==minRect.size.width && maxh == minRect.size.height)
  {
    degree = minRect.angle;
    Point2f pts[4];
    minRect.points(pts);
    Scalar color_1 = Scalar(rng1.uniform(0,255), rng1.uniform(0, 255), rng1.uniform(0, 255));
    for (int k=0;k<4;k++)
    {
      line(img3,pts[k],pts[(k+1)%4],color_1,2,8,0);
    }
  }
}

cout << degree<< endl;

Opencv 计算图片旋转角度-LMLPHP

05-07 09:31