Änderungen

Aus Hackerspace Ffm
Wechseln zu: Navigation, Suche

OpenCV mit Python

1.829 Byte hinzugefügt, 31 Mai
/* OpenCV Cheats */
* Bildbereich kopieren: <code>block = bild[y0:y1, x0:x1]</code>
* Bildbereich woanders einfügen (Größe muss genau passen!): <code>bild[y0:y1, x0:x1] = block</code>
* Alle Farbkomponenten eines Pixels ändern: <code>bild[x,y,x] = [b,g,r]</code>
* Nur eine Farbkomponente ändern (hier g = Index 1 da Reihenfolge BGR): <code>bild[x,y,1] = 255</code>
* 8-Bit Farbkomponenten holen: <code>bild.astype(np.uint8)</code> (falls man mal mit float oder so gerechnet hat)
Beispiel Code um features zu verfolgen, aka optical flow.
Code funktioniert unter OpenCV Version 3.4.4
 
[[Datei:OpencvOpticalFlowPICam.zip]]
 
[[Datei:OpencvOpticalFlowUSBCam.zip]]
 
[[Datei:OpencvWorkshopOpticalFlow.jpg|400px]]
 
== ArUco - Pose Estimation ==
Findet den ArUco Marker und seine Position sowie Orientierung im Raum.<br>
Über eine Distanzfunktion kann dann z.B. die Entfernung des Markermittelpunktes zur Kamera ermittelt werden. Dieser wird in cm unten links angezeigt.
<pre>
asdfasdfimport numpy as np</pre>import cv2import cv2.aruco as aruco
cap = cv2.VideoCapture(0)
aruco_dict = aruco.Dictionary_get(aruco.DICT_6X6_250)
parameters = aruco.DetectorParameters_create()
while(True): ret, frame = cap.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) corners, ids, rejectedImgPoints = aruco.detectMarkers(gray, aruco_dict, parameters=parameters) gray = aruco.drawDetectedMarkers(gray, corners, ids)  mtx = np.array([[5.3434144579284975e+02, 0., 3.3915527836173959e+02], [0., 5.3468425881789324e+02, 2.3384359492532246e+02], [0., 0., 1.]], np.float) dist = np.array([-2.8832098285875657e-01, 5.4107968489116441e-02, 1.7350162244695508e-03, -2.6133389531953340e-04, 2.0411046472667685e-01], np.float)  if ids != None: # if aruco marker detected rvec, tvec, objp = aruco.estimatePoseSingleMarkers(corners, 3.5, mtx, dist) # For a single marker aruco.drawDetectedMarkers(gray, corners, ids, (0, 255, 0)) aruco.drawAxis(gray, mtx, dist, rvec, tvec, 10) print(tvec[0][0]) distance = round( np.linalg.norm(tvec[0][0]), 2) cv2.putText(gray, str( distance ) + " cm", (10, 400), cv2.FONT_HERSHEY_PLAIN, 1, (255, 0, 255))  cv2.imshow('frame',gray) if cv2.waitKey(1) & 0xFF == ord('q'): break # When everything done, release the capturecap.release()cv2.destroyAllWindows()</pre>[[Datei:OpencvWorkshopOpticalFlowArUco_PoseEstimation.jpgpng|400px]]
1.659
Bearbeitungen