概述
opencv引入配置看这里https://blog.csdn.net/angelpaiy/article/details/126870213
需要引入的opencv类
import org.opencv.core.Scalar;
import org.opencv.core.Point;
import org.opencv.core.Mat;
import org.opencv.core.Core;
import org.opencv.core.MatOfPoint;
import org.opencv.imgproc.Imgproc;
实现基本原理是使用opencv创建空白的Mat,然后使用多边形分别填充Mat,统计非空像素值,得出单个多边形面积。同时使用两个多边形填充空白Mat,即可得出两个多边形的并集。
交集面积 = 多边形1面积+多边形2面积-并集面积
Integer interArea = areaArea + boxArea - unionArea;
IOU = 交集面积/并集面积;
/** 如果需要计算交并比,使用这行*/
Float IOU = interArea*1.0f/unionArea));
示例代码中返回值为box与area重叠面积 占box面积的比值
/***交集占box面积比例为*/
float interBox = interArea*1.0f/boxArea;
完整代码如下
/**
* @param areaPoints: 关注区域多边形顶点坐标集合
* @param boxPoints: 识别返回box框四个顶点坐标集合
* @param imageWidth: 图片的最大像素宽
* @param imageHeight: 图片的最大像素高
* @return: Float: 识别框与关注区域重叠面积 与 识别框自身面积的占比 ,
* 取值范围 0-1.0,其中0表示识别框不在关注区域内部,1表示识别框被关注区域完全包围。
* 使用时可根据实际情况取阀值,例如返回0.5以上判定为目标物在关注区域内。
*/
private static Float CalculatingIntersectionOfPolygons(List<Point> areaPoints,List<Point> boxPoints,
Integer imageWidth,Integer imageHeight ){
Integer rows = imageWidth;
Integer cols = imageHeight;
Scalar s0 = new Scalar(1,0,0);
//关注区域面积
Mat img = Mat.zeros(rows, cols, 2);
MatOfPoint areaMat = new MatOfPoint();
areaMat.fromList(areaPoints);
Imgproc.fillConvexPoly(img,areaMat,s0);
Integer areaArea = Core.countNonZero(img);
//box面积
Mat img1 = Mat.zeros(rows, cols, 2);
MatOfPoint boxMat = new MatOfPoint();
boxMat.fromList(boxPoints);
Imgproc.fillConvexPoly(img1,boxMat,s0);
Integer boxArea = Core.countNonZero(img1);
//并集面积计算
Imgproc.fillConvexPoly(img1,areaMat,s0);
Integer unionArea = Core.countNonZero(img1);
//交集面积计算
Integer interArea = areaArea + boxArea - unionArea;
/** 如果需要计算交并比,使用这行*/
// Float IOU = interArea*1.0f/unionArea));
/***交集占box面积比例为*/
float interBox = interArea*1.0f/boxArea;
return interBox;
}
参考python版本: zhuanlan。zhihu。com/p/121065301
有更好的实现方法欢迎留言交流
最后
以上就是义气火车为你收集整理的Java使用opencv计算两个多边形交并比IOU、重叠面积占比的全部内容,希望文章能够帮你解决Java使用opencv计算两个多边形交并比IOU、重叠面积占比所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复