
一、问题当时在调试装甲板配对的时候发现一直报错。因为我封装和检测逻辑每一步都会有打印报错日志但我看我的 inRange 后的图片发现是没有问题的mask 后的图片我也看了也标记了还把坐标打印出来但发现还是有问题。最后才怀疑角度有问题。二、排查然后我把每一个的坐标和角度都打印出来把对应坐标和角度发给 AI让 AI 总结。根据图片上本来应该配对的却显示角度差那么多然后就发现问题了。当时就想到角度的标准是哪一个边哪一个是宽、哪一个是高同一个垂直灯带为什么有时候是 180° 左右有时候是 90° 左右呢角度有问题是我当时想打印出来角度的 log来判断是不是我写的程序错了。但明明是图片上的灯带就应该配对的我把坐标给 AI 分析AI 说明了原因可能是对于 minAreaRect 的 angle 判断算法有关系。三、原因算法对于角度的定义是 width 这个边与 x 轴的夹角。但程序对识别图形长宽的判断逻辑是“随机的”不可控制的不一定宽就是 width也可能是 height不一定短边就是宽、长边就是长不一定是我们认知中的那样。需要检查和判断所以可能是垂直的边是 width90°也可能是平放的边是 width0°。四、解决统一以灯带的长边为基准计算其与 x 轴的夹角。长边之所以是长边就是比较 width 和 height 的大小来判断。width 是长边则不用动否则转 90°。floatanglerRect.angle;if(rRect.size.widthrRect.size.height){angle90;// width 不是长边转一下}// 现在 angle 就是长边与 x 轴的夹角了统一了