【opencv】cv2.minAreaRect()内部实现算法分析
opencv⾥求最⼩外接矩形的函数是cv2.minAreaRect()
minAreaRect()内部实现思路:
1. 先求轮廓点集的凸包convex hull
关于凸包convex hull:
关于凸包算法
opencv⾥求凸包的函数是convexHull(),其⽤的算法是
其他的凸包算法:
2. 再求凸包的
⼏何定理:多边形的最⼩外接矩形的⼀条边必然与多边形的其中⼀条边共线
旋转卡尺算法
经期可以喝咖啡吗
根据上⾯的定理,只需要枚举多边形的边,做外接矩形,⽐较外接矩的⾯积,选最⼩的那个。(因为是矩形,所以枚举旋转超过90度结束,之后的枚举都是重复的外接矩形)
opencv⾥的函数:rotatingCalipers()
rotatingCalipers( hpoints, n, CALIPERS_MINAREARECT,(float*)out );
广东科技贸易职业学院
合作共赢英文
box.size.width =(float)std::sqrt((double)out[1].x*out[1].x +(double)out[1].y*out[1].y);
box.size.height =(float)std::sqrt((double)out[2].x*out[2].x +(double)out[2].y*out[2].y);
box.angle =(float)atan2((double)out[1].y,(double)out[1].x );
// ((CvPoint2D32f*)out)[0] - corner
// ((CvPoint2D32f*)out)[1] - vector1 bad on out[0]
资金支付管理办法
// ((CvPoint2D32f*)out)[2] - vector2 bad on out[0]
小米山药粥的做法
//
英语文学// ^
1一一9九宫格数独口诀
// |
// vector2 |
一望无际意思
// |
// |____________\
// corner /
// vector1
最⼩外接矩形的另⼀种实现思路