在图像处理中,经常需要计算两个矩形的重叠面积,在 python 中,可以使用 shapely 包中的 Polygon 函数,但是到了 c++ 没有想象中的那么简单。
查阅了很多资料,基本上都是判断两个矩形是否包含来计算,但是两个矩形的相交情况太多了,每个方法我都担心考虑不全,所以想了一个在画布上画出矩形框,然后通过计算白点数或者轮廓的方法来计算面积。
但是就算用了这个方法,求取真正的重叠面积还差一个像素点,是否要加数值为1这个偏移量需要根据矩形的重叠情况来确定,这里不写的那么精细,不考虑1个像素点的偏移。
所以本方法适合于计算重叠率,而不是重叠面积,因为重叠面积会根据矩形重叠情况的不同差0个或1个像素值。
#include #include using namespace std;using namespace cv;int main(){
// 1. 新建一个画布,把矩形画在画布上, 注意,矩形一定要在画布里面,不能在画布外面或者边上 Mat canvaCaluateRectangleOverlap(100, 100, CV_8UC1, Scalar(0, 0, 0)); // 2. 把两个矩形都画在画布上 Rect rect1 = Rect(10, 10, 20, 20); Rect rect2 = Rect(20, 20, 20, 30); //为了使用fillPoly填充画布需要生成Point Point rect1Point[1][4]; rect