2017-09-19 3 views
0

現在の回転角度を取得する方法。長方形の回転角を得るためのよりよい方法がありますか(パフォーマンスの向上/組み込み関数)ですか?

cv::Rect rRect(pTopLeft.x,pTopLeft.y,pBottomRight.x-pTopLeft.x,pBottomRight.y-pTopLeft.y); 

img(rRect); 

std::vector<cv::Point> points; 
cv::Mat_<uchar>::iterator it = img.begin<uchar>(); 
cv::Mat_<uchar>::iterator end = img.end<uchar>(); 
for (; it != end; ++it) 
    if (*it) 
     points.push_back(it.pos()); 

cv::RotatedRect box = cv::minAreaRect(cv::Mat(points)); 
double angle = box.angle; 

if (angle < -45.) 
    angle += 90.; 

のRectを使用して角度を取得するためにOpenCVの中だけ修正してくださいまたはある任意の作り付けの機能を使用してのRectの角度をforループを回避して、直接入手できますする方法はありますか?

+0

質問は指向あまりにも漠然として意見としてオフトピックです。他に何もない場合は、改善したい側面を指定する必要がありますが、ここでは文章コードのレビューは決してトピックにはなりません。 – xaxxon

+0

これは、これよりも焦点を当てたコーディングの問題を扱うStack Overflowにとっては、実際には広すぎるため、このトピックを議論の対象外としています。作業コードの改善に関する助言については、代わりに[codereview.se]を検討してください。しかし、まず、[Stack Overflowユーザーのためのコードレビューのガイド](// codereview.meta.stackexchange.com/a/5778)を読んでください。そこには違ったやり方で行われました! –

+0

私はそれをより具体的にするために質問を編集しました –

答えて

0

私たちは平方ポイントを持っていれば、以下を行うことができます。何かをする「より良い」の方法を求めて

cv::Mat debugSquares(std::vector<std::vector<cv::Point> > squares, cv::Mat image) 
{ 
    for (int i = 0; i< squares.size(); i++) { 
     // draw contour 
     cv::drawContours(image, squares, i, cv::Scalar(255,0,0), 1, 8, std::vector<cv::Vec4i>(), 0, cv::Point()); 

     // draw bounding rect 
     cv::Rect rect = boundingRect(cv::Mat(squares[i])); 
     cv::rectangle(image, rect.tl(), rect.br(), cv::Scalar(0,255,0), 1, 8, 0); 

     // draw rotated rect 
     cv::RotatedRect minRect = minAreaRect(cv::Mat(squares[i])); 
    cout<<"\nangle"<<minRect.angle; 
     cv::Point2f rect_points[4]; 
     minRect.points(rect_points); 
     for (int j = 0; j < 4; j++) { 
      cv::line(image, rect_points[j], rect_points[(j+1)%4], cv::Scalar(0,0,255), 3, 8); // blue 
     } 
    } 

    imshow(" Image", image); 
    return image; 
} 

`

関連する問題