用点线或虚线的OpenCV矩形

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()  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值