Rectángulo opencv con líneas de puntos o discontinuas

Tengo una línea de código aquí que usa el enlace de python para opencv:

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

Esto dibuja un rectángulo rojo en la imagen img de espesor 4 .

Pero, ¿hay alguna forma de estilizar las líneas de los rectangularjs? No demasiado. Solo punteado o punteado, eso es todo.

 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() 

OpenCV no admite (actualmente) propiedades de línea más allá del grosor y anti-aliasing.

  • openCV es una biblioteca de código abierto para que pueda encontrar el código fuente para dibujar y modificarlo ligeramente
  • puede usar LineIterator y obtener el estilo que desee en unas pocas líneas de código