OpenCV-Python is een Python-linkbibliotheek die is ontworpen om problemen met computervisie op te lossen. De methode cv2.circle () wordt gebruikt om een cirkel op een afbeelding te tekenen.
Syntaxis: cv2.circle(afbeelding, center_coordinates, straal, kleur, dikte)
Parameters:
afbeelding: dit is de afbeelding waarop de cirkel moet worden getekend.
center_coordinates: sterk> Het zijn de middelpuntscoördinaten van de cirkel. De coördinaten worden weergegeven als tupels van twee waarden, namelijk (X coördinaatwaarde, Y coördinaatwaarde).
straal: Het is de straal van de cirkel.
kleur: het is de kleur van de grenslijn van de cirkel die moet worden getekend. Voor BGR geven we een tuple door. bijv.: (255, 0, 0) voor blauwe kleur.
dikte: dit is de dikte van de cirkelgrenslijn in px. Een dikte van -1 px vult de cirkelvorm met de opgegeven kleur.
Retourwaarde: het retourneert een afbeelding.
Hoe teken ik een cirkel over afbeelding OpenCV?
StackOverflow-vraag
Ik gebruik python en opencv om een afbeelding van de webcam te krijgen, en ik wil weet hoe ik een cirkel over mijn afbeelding moet tekenen, gewoon een simpele groene cirkel met transparante vulling
mijn code:
import cv2 import numpy import sys if __name__ == `__main__`: #haal huidig frame van webcam cam = cv2.VideoCapture(0) img = cam.read() #ho w teken een cirkel???? cv2.imshow(`WebCam`, img) cv2.waitKey()
Bij voorbaat dank.
Antwoord
cv2.circle(img, centrum, straal, kleur, dikte=1, lineType=8, shift=0) ‚Üí Geen Tekent een cirkel. Parameters: img (CvArr) ‚Äì Afbeelding waar de cirkel is als middelpunt (CvPoint) ‚Äì Middelpunt van de cirkel straal ( int) ‚Äì Radius van de cirkelkleur (CvScalar) ‚Äì Cirkelkleurdikte (int) ‚Äì Dikte van de cirkelomtrek indien positief, anders geeft dit aan dat een gevulde cirkel moet worden getekend lineType (int ) ‚Äì Type van de cirkelgrens, zie Regelbeschrijvingsverschuiving (int) ‚Äì Aantal fractionele bits in de middelste coördinaten en straalwaarde
Gebruik de parameter "thickness" alleen voor de rand.
Voorbeeld #1
def blob(x): """Gegeven een Nx3-matrix van blobposities en -grootte, maak N img_size x img_size afbeeldingen, elk met een blob erop getekend gegeven door de waarde in elke rij van x Een rij van x = [x,y,radius].""" y = np.zeros((x.shape[0], img_size, img_size)) voor i , deeltje in enumerate(x): rr, cc = skimage.draw.circle( particle[0], particle[1], max(particle[2], 1), shape=(img_size, img_size) ) y[i, rr, cc] = 1 return y #%% # namen (dit is voorlopig alleen ter referentie!)
Voorbeeld #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. hoogte), (100, 255, 255)) cv2.line(self.img, (self.width - 10, 0), (self.width/2 + 5, self.height), (100, 255, 255) ) voor track_number in range(1, 65): if str(track_number)+`_track_range` in radarData: track_range = radarData[str(track_nummer)+`_track_range`] track_angle = (float(radarData[str(track_nummer)+`_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)
Voorbeeld #3
def ProcessFrame(self, frame): # segment arm region segment = self.SegmentArm(frame) # maak een kopie van de gesegmenteerde afbeelding om op te tekenen draw = cv2.cvtColor(segment, cv2.COLOR_GRAY2RGB) # teken enkele hulpjes voor het correct plaatsen van de hand 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) # zoek de romp van het gesegmenteerde gebied, en vind op basis daarvan de # convexiteitsdefecten [contouren,defecten] = self.FindHullDefects(segment) # detecteer het aantal vingers afhankelijk van de contouren en convexiteitsdefecten # teken defecten die bij de vingers horen groen, andere rood [nofingers,draw] = zelf.DetectN umberFingers(contouren, defecten, tekenen) # print aantal vingers op afbeelding cv2.putText(draw, str(nofingers), (30,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255)) return draw
Voorbeeld #4
def mark_hand_center(frame_in,cont): max_d=0 pt=(0,0) x,y,w,h = cv2.boundingRect(cont) voor ind_y in xrange(int( y+0.3*h),int(y+0.8*h)): #rond 0.25 tot 0.6 regio van hoogte (snellere berekening met goede resultaten) voor ind_x in xrange(int(x+0.3*w),int(x+ 0.6*w)): #rond 0.3 tot 0.6 regio van breedte (Sneller berekening met goede resultaten) 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. Zoek en toon gebaar
Voorbeeld #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)) voor 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.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), zelf .font, 1, (255,255,255), 2) cv2.imshow("Radar", self.img) cv2.waitKey(2)
Gearchiveerde versie
OpenCV-Python —¬†is een Python-bindingen bibliotheek voor het oplossen van problemen met computervisie.¬†cv2.circle ()
wordt gebruikt om een cirkel op een afbeelding te tekenen.
Syntaxis: cv2.circle (afbeelding, center_coordinates, straal, kleur , dikte)
Parameters:
afbeelding: Het is de afbeelding waarop de cirkel moet worden getekend.
center_coordinates: Het zijn de middelpuntscoördinaten van de cirkel.¬†De coördinaten worden weergegeven als tupels van twee waarden ie ( X coördinaatwaarde, Y coördinaatwaarde).
straal: Het is de straal van de cirkel.
kleur: Het is de kleur van de grenslijn van de cirkel die moet worden getekend. Voor BGR passen we sa tuple. eg: (255, 0, 0) voor blauwe kleur.
dikte: Het is de dikte van de cirkelgrenslijn in px .¬ †Dikte van -1 px vult de vorm rectangle-method/">rechthoek met de opgegeven kleur.Retourwaarde: Het retourneert een afbeelding.
blockquote>De afbeelding wordt gebruikt voor alle onderstaande voorbeelden:
Voorbeeld #1:
tbody> uit te leggen
# Python-programma om de cv2.circle () methode
 
# cv2 import
import
cv2 
 
# pad
pad
=
r
`C: UsersRajnishDesktoppythonengineeringgeeks.png`
 
 # Lees afbeelding in standaardmodus
afbeelding
=
cv2.imread (pad)
 
# Naam van het venster waarin de afbeelding wordt weergegeven
window_name
=
`Afbeelding `
 
¬†# Center coördinaten
center_coordinates
=
(
120
,
50
)
 
# Cirkelradius
straal
=
20
 
 # Blauwe kleur in BGR
kleur
=
(
255
,
0
,
0
)
 
# Regelbreedte 2 px
dikte
=
2
 
# Met behulp van de cv2.circle () methode
# Teken een cirkel met een blauwe rand van 2 px
afbeelding
=
cv2.circle (afbeelding, center_coordinates, straal, kleur, dikte )
 
# Weergave afbeelding
cv2.imshow ( window_name, image) 
Uitvoer:
Voorbeeld #2:
Gebruik - 1 px dikte om de rectangle-method/">rechthoek met rood te vullen.
# Python-programma om de cv2.circle () methode
 
# cv2 import
import
cv2 
 
# pad
pad
=
r
`C: UsersRajnishDesktoppythonengineeringgeeks.png`
 p> 
# Lees afbeelding in standaardmodus
afbeelding
=
cv2.imread (pad)
 
# Naam van het venster waarin de afbeelding wordt weergegeven
window_name
=
`Afbeelding`
 
¬†# Center coördinaten
center_c coördinaten
=
(
120
,
100
)
¬ †
 # Circle radius
radius
=
30
 
 # Rood in BGR
kleur
=
(
0
,
0
,
255
)
 
# Lijndikte -1 px
dikte
=
-
1
 
# Gebruiken de cv2.circle () methode
# Teken een rode cirkel van -1 px
afbeelding
=
cv2.circle (afbeelding, center_coordinates, straal, kleur, dikte)
< code class = "undefined spaces">  
# Tonen van een afbeelding
cv2.imshow (window_name, image ) 
 
Uitvoer: