OpenCV-Python es una biblioteca de enlaces de Python diseñada para resolver problemas de visión artificial. El método cv2.circle() se utiliza para dibujar un círculo en cualquier imagen.
Sintaxis: cv2.circle(imagen, coordenadas_centrales, radio, color, grosor)
Parámetros:
imagen: Es la imagen sobre la que se va a dibujar el círculo.
coordenadas_centro: Son las coordenadas del centro del círculo. Las coordenadas se representan como tuplas de dos valores, es decir (valor de la coordenada X, valor de la coordenada Y).
radio: es el radio del círculo.
color: Es el color de la línea del borde del círculo a dibujar. Para BGR, pasamos una tupla. por ejemplo: (255, 0, 0) para el color azul.
grosor: Es el grosor de la línea del borde del círculo en px. Un grosor de -1 px rellenará la forma del círculo con el color especificado.
Valor devuelto: Devuelve una imagen.
¿Cómo dibujar un círculo sobre la imagen OpenCV?
Pregunta de StackOverflow
Uso Python y OpenCV para obtener una imagen de la cámara web, y quiero sé cómo dibujar un círculo sobre mi imagen, solo un círculo verde simple con relleno transparente
mi código:
importar cv2 importar numpy importar sys if __name__ == `__main__`: #obtener cuadro actual de la cámara web cam = cv2.VideoCapture(0) img = cam.read() #ho dibujar un círculo???? cv2.imshow(`WebCam`, img) cv2.waitKey()
Gracias de antemano.
Respuesta
cv2.circle(img, centro, radio, color, grosor=1, lineType=8, shift=0) ‚Üí Ninguno Dibuja un círculo. Parámetros: img (CvArr) ‚Äì Imagen donde el círculo es centro dibujado (CvPoint) ‚Äì Centro del radio del círculo ( int) ‚Äì Radio del color del círculo (CvScalar) ‚Äì Grosor del color del círculo (int) ‚Äì Grosor del contorno del círculo si es positivo; de lo contrario, esto indica que se debe dibujar un círculo relleno lineType (int ) ‚Äì Tipo del límite del círculo, consulte Cambio de descripción de línea (int) ‚Äì Número de bits fraccionarios en las coordenadas centrales y valor del radio
Use el parámetro "grosor" solo para el borde.
Ejemplo #1
def blob(x): """Dada una matriz Nx3 de posiciones y tamaños de blobs, cree N img_size x img_size imágenes, cada una con un blob dibujado en ellos dado por el valor en cada fila de x Una fila de x = [x,y,radius].""" y = np.zeros((x.shape[0], img_size, img_size)) para i , partícula en enumerate(x): rr, cc = skimage.draw.circle(partícula[0], partícula[1], max(partícula[2], 1), forma=(img_size, img_size) ) y[i, rr, cc] = 1 return y #%% # nombres (¡esto es solo como referencia por el momento!)
Ejemplo #2
def update(self, radarData): self .img = np.zeros((self.height, self.width, self.channels), np.uint8) cv2.line(self.img, (10, 0), (self.width/2 - 5, self. altura), (100, 255, 255)) cv2.line(self.img, (self.width - 10, 0), (self.width/2 + 5, self.height), (100, 255, 255) ) para track_number in range(1, 65): if str(track_number)+`_track_range` in radarData: track_range = radarData[str(track_number)+`_track_range`] track_angle = (float(radarData[str(track_number)+`_track_angle `])+90.0)*math.pi/180 x_pos = math.cos(track_angle)*track_range*4 y_pos = math.sin(track_angle)*track_range*4 cv2.circle(self.img, (self.w idth/2 + int(x_pos), self.height - int(y_pos) - 10), 5, (255, 255, 255)) #cv2.putText(self.img, str(track_number), # (self.width /2 + int(x_pos)-2, self.height - int(y_pos) - 10), self.font, 1, (255,255,255), 2) cv2.imshow("Radar", self.img) cv2.waitKey( 2)
Ejemplo #3
def ProcessFrame(self, frame): # segment arm region segment = self.SegmentArm(frame) # hacer una copia de la imagen segmentada para dibujar draw = cv2.cvtColor(segment, cv2.COLOR_GRAY2RGB) # dibujar algunos ayudantes para colocar correctamente la mano cv2.circle(draw,(self.imgWidth/2,self.imgHeight/2),3,[255,102,0],2) cv2.rectangle(draw, (self.imgWidth/3,self.imgHeight/3), (self.imgWidth*2/3, self.imgHeight*2/3), [255,102,0],2) # encontrar el casco del área segmentada, y en base a eso encontrar los # defectos de convexidad [contornos, defectos] = self.FindHullDefects(segmento) # detectar el número de dedos dependiendo de los contornos y defectos de convexidad # dibujar defectos que pertenecen a los dedos verdes, otros rojos [sin dedos, dibujar] = self.DetectN umberFingers(contornos, defectos, dibujo) # imprime el número de dedos en la imagen cv2.putText(dibujo, str(sindedos), (30,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255)) return dibujo
Ejemplo #4
def mark_hand_center(frame_in,cont): max_d=0 pt=(0,0) x,y,w,h = cv2.boundingRect(cont) for ind_y in xrange(int( y+0.3*h),int(y+0.8*h)): #alrededor de 0.25 a 0.6 regiones de altura (Cálculo más rápido con resultados correctos) para ind_x en xrange(int(x+0.3*w),int(x+ 0.6*w)): #alrededor de 0.3 a 0.6 región de ancho (cálculo más rápido con resultados correctos) dist= cv2.pointPolygonTest(cont,(ind_x,ind_y),True) if(dist>max_d): max_d=dist pt=( ind_x,ind_y) if(max_d>radius_thresh*frame_in.shape[1]): thresh_score=True cv2.circle(frame_in,pt,int(max_d),(255,0,0),2) else: thresh_score=False return frame_in,pt,max_d,thresh_score # 6. Gesto de búsqueda y visualización
Ejemplo #5
def update(self, radarData): self.img = np.zeros((self.height, self.width, self.channels) , np.uint8) cv2.line(self.img, (10, 0), (self.width/2 - 5, self.height), (100, 255, 255)) cv2.line(self.img, ( self.width - 10, 0), (self.width/2 + 5, self.height), (100, 255, 255)) for track_number in range(1, 65): if str(track_number)+`_track_range` en radarData: track_range = radarData[str(track_number)+`_track_range`] track_angle = (float(radarData[str(track_number)+`_track_angle`])+90.0)*math.pi/180 x_pos = math.cos(track_angle) *rango_de_pista*4 y_pos = math.sin(ángulo_de_pista)*rango_de_pista*4 cv2.circle(self.img, (self.width/2 + int(x_pos), self.height - int(y_pos) - 10), 5, (255, 255, 255)) #cv2.putText(self.img, str(track_number), # (self.width/2 + int(x_pos)-2, self.height - int(y_pos) - 10), self .font, 1, (255,255,255), 2) cv2.imshow("Radar", self.img) cv2.waitKey(2)
Versión archivada
OpenCV-Python —¬†es un enlace de Python biblioteca para resolver problemas de visión artificial.¬†cv2.circle ()
se usa para dibujar un círculo en cualquier imagen.
Sintaxis: cv2.circle (imagen, coordenadas_centrales, radio, color, grosor)
Parámetros:
imagen: Es la imagen sobre la que se va a dibujar el círculo.
coordenadas_centrales: Son las coordenadas del centro del círculo.¬†Las coordenadas se representan como tuplas de dos valores ‚Äã‚Äãie ( X valor de la coordenada, Y valor de la coordenada).
radio: Es el radio del círculo.
color: Es el color de la línea del borde del círculo a dibujar.¬†Para BGR , pasamos sa tupla.¬†ej.: (255, 0, 0) para el color azul.
espesor: Es el espesor de la línea del borde del círculo en px .¬ †Grosor de -1 px llenará la forma rectangle-method/">rectángulo por la forma especificada color.Valor de retorno: Devuelve una imagen.
La imagen se usa para todos los ejemplos a continuación:
Ejemplo #1:
# Programa Python para explicar el método cv2.circle ()
 
# cv2 import
importar cv2   
# ruta
ruta
=
r
`C: UsersRajnishDesktoppythonengineeringgeeks.png`
 
 # Leer imagen en modo predeterminado
imagen
=
cv2.imread (ruta)
 
# Nombre de la ventana en la que se se muestra la imagen
window_name
=
`Imagen `
 
 # Coordenadas del centro
coordenadas_centrales = ( 120 , 50 )
 
# Radio del círculo
radio = 20
 
 # Color azul en BGR
color
=
(
255
< código clase = "simple">,0 , 0 ) ¬†
# Ancho de línea 2 px
grosor = 2  
# Usando el método cv2.circle ()
# Dibuja un círculo con un borde azul de 2 px
imagen
=
cv2.circle (imagen, centro_coordenadas, radio, color, grosor )
 
# Mostrar imagen
cv2.imshow ( nombre_ventana, imagen) 
Salida:
Ejemplo n.° 2:
Utilizar - 1 px de grosor para rellenar el rectangle-method/">rectángulo con rojo.
# Programa Python para explicar el cv2.circle () método
 
# importar cv2
importar cv2   
# ruta
ruta
=
r
`C: UsersRajnishDesktoppythonengineeringgeeks.png`
 
# Leer imagen en modo predeterminado < /código>
imagen = cv2.imread (ruta)  
# Nombre de la ventana en la que se muestra la imagen
nombre_ventana
= `Imagen`
   # Coordenadas del centro
center_c oordenadas
=
(
120
,
100 )
¬ †¬† # Radio del círculo
radio
=
30
   # Rojo en BGR
color
=
( 0 , 0 , 255 )  
# Grosor de línea -1 px
grosor
=
- 1  
# Usando el método cv2.circle () # Dibuja un círculo rojo de -1 px
imagen
=
cv2.circle (imagen, coordenadas_centrales, radio, color, grosor)
< code class = "espacios indefinidos">  
# Mostrando una imagen
< clase de código = "simple"> cv2.imshow (nombre_ventana, imagen)¬†¬†
Salida: