opencv识别不同形状

基本思路:将图片转化为灰度图后,过滤出边缘,并识别顶点,通过统计顶点的个数来判断形状


path="./images/shape.png"
img=cv.imread(path,0)##0--读入灰度图片,1--读入一副彩色图片,忽略alpha通道,-1----读入完整图片,包括alpha通道
imgContour=img.copy()

过滤出边缘


canny_img=cv.Canny(img,120,250)#参数根据情况调整

识别图片中形状的边缘


contours,hierachy=cv.findContours(canny_img,mode=cv.RETR_EXTERNAL,method=cv.CHAIN_APPROX_NONE)

根据顶点数输出形状


for cnt in contours:
    cv.drawContours(imgContour,cnt,-1,(255,0,0),4)##画出外边框
    area=cv.contourArea(cnt)
    if area>500:
        #计算边长
        peri=cv.arcLength(cnt,True)
        #用多边形近似图片中的图像
        vertices = cv.approxPolyDP(cnt,peri *0.02,True)##输出近似图像折点的坐标
        
        corners = len(vertices)
        x,y,w,h=cv.boundingRect(vertices)#一个图像的最小矩形边框,画把图形圈起来的正方形
        cv.rectangle(imgContour,(x,y),(x+w,y+w),(0,255,0),4)
        
        if corners == 3 :
            cv.putText(imgContour,'triangle',(x,y-5),cv.FONT_HERSHEY_SIMPLEX,1,(0,0,255),2)
        elif corners == 4 :
            cv.putText(imgContour,'rectangle',(x,y-5),cv.FONT_HERSHEY_SIMPLEX,1,(0,0,255),2)
        elif corners == 5 :
            cv.putText(imgContour,'pentage',(x,y-5),cv.FONT_HERSHEY_SIMPLEX,1,(0,0,255),2)
        elif corners >5 :
            cv.putText(imgContour,'circle',(x,y-5),cv.FONT_HERSHEY_SIMPLEX,1,(0,0,255),2)

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值