laixinmin1234 2022-05-31 16:01 采纳率: 16.7%
浏览 94
已结题

关于opencv的矩形检测

我用opencv的minAreaRect检测轮廓后,结果如下,第一张图是原图,第二张是检测出来的最小矩形图,第三张是画在空板上的,一共检测出来三个矩形,我要怎么分辨出来那个是内框图,哪个是外框图,哪位老大给讲解下

img

img

img

  • 写回答

7条回答

  • 爱晚乏客游 2022-06-01 10:02
    关注

    opencv的cv2.findContours()这个函数的cv2.RETR_TREE方法提供了轮廓间的层级关系,4.0版本以上的有两个返回值:
    contours, hierarchy=cv2.findContours(gray,minThresh,255,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
    前面一个contours就是所有找到的轮廓,重点在于后面这个hierachy

    img


    img


    hierarchy=[A,B,C,D]这4个值,表示嵌套关系,其中A为同级的下一个轮廓在contours中的下标(弟弟级别轮廓),B为同级的前一个轮廓(哥哥级),C为目前轮廓的第一个轮廓(嫡长子),D为该轮廓的父轮廓,-1表示不存在。搞清楚了这个,你这种的就很清晰了
    hierarchy[0]=[-1,-1,1,-1],表示0号轮廓有子轮廓,嫡长子下标为1,
    hierarchy[0]=[2,-1,-1,0],表示1号轮廓,弟弟为2号轮廓,没有哥哥级别,没有孩子,0号为其父轮廓。
    hierarchy[0]=[-1,1,-1,0],表示2号轮廓,其下无弟,兄长为1号轮廓,无孩子,0号为其父轮廓。
    所以,除非你能保证说你的轮廓层级只有两级,那么直接遍历0号轮廓和0号轮廓的兄弟,他们的孩子就都是2级轮廓(广度遍历)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 6月10日
  • 已采纳回答 6月2日
  • 创建了问题 5月31日

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制