opencv rectangle with dotted or dashed lines

后端 未结 4 690
不知归路
不知归路 2020-12-19 00:58

I have a line of code here that uses the python binding for opencv:

cv2.rectangle(img, (box[1], box[0]), (box[3], box[2]), (255,0,0), 4)

Th

4条回答
  •  南方客
    南方客 (楼主)
    2020-12-19 01:38

    import cv2
    import numpy as np
    def drawline(img,pt1,pt2,color,thickness=1,style='dotted',gap=20):
        dist =((pt1[0]-pt2[0])**2+(pt1[1]-pt2[1])**2)**.5
        pts= []
        for i in  np.arange(0,dist,gap):
            r=i/dist
            x=int((pt1[0]*(1-r)+pt2[0]*r)+.5)
            y=int((pt1[1]*(1-r)+pt2[1]*r)+.5)
            p = (x,y)
            pts.append(p)
    
        if style=='dotted':
            for p in pts:
                cv2.circle(img,p,thickness,color,-1)
        else:
            s=pts[0]
            e=pts[0]
            i=0
            for p in pts:
                s=e
                e=p
                if i%2==1:
                    cv2.line(img,s,e,color,thickness)
                i+=1
    
    def drawpoly(img,pts,color,thickness=1,style='dotted',):
        s=pts[0]
        e=pts[0]
        pts.append(pts.pop(0))
        for p in pts:
            s=e
            e=p
            drawline(img,s,e,color,thickness,style)
    
    def drawrect(img,pt1,pt2,color,thickness=1,style='dotted'):
        pts = [pt1,(pt2[0],pt1[1]),pt2,(pt1[0],pt2[1])] 
        drawpoly(img,pts,color,thickness,style)
    
    im = np.zeros((800,800,3),dtype='uint8')
    s=(234,222)
    e=(500,700)
    drawrect(im,s,e,(0,255,255),1,'dotted')
    
    cv2.imshow('im',im)
    cv2.waitKey()      
    

提交回复
热议问题