2014-11-01 1703 views
2

我有一个行代码在这里,使用Python为OpenCV的结合:用点线或虚线的OpenCV矩形

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

这吸取了厚度4图像0​​红色矩形。

但是有没有办法矩形的线可以风格化?不是太多。只是虚线,或虚线,这是真的。

回答

2

的OpenCV不(目前)超出厚度和抗混叠支撑线特性。

2
  • OpenCV的开源是图书馆,因此您可以绘制找到源代码并修改它稍微
  • 可以使用LineIterator并得到你想要的任何风格的代码
4
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()  
几行