Änderungen

Aus Hackerspace Ffm
Wechseln zu: Navigation, Suche

OpenCV mit Python

396 Byte entfernt, 18:52, 31. Mai 2019
/* 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)
Code funktioniert unter OpenCV Version 3.4.4
<pre>from picamera[[Datei:OpencvOpticalFlowPICam.array import PiRGBArrayfrom picamera import PiCameraimport timeimport numpy as npimport cv2zip]]
# initialize the camera and grab a reference to the raw camera capturecamera = PiCamera()camera[[Datei:OpencvOpticalFlowUSBCam.resolution = (640, 480)camera.framerate = 32camera.rotation = 0rawCapture = PiRGBArray(camera, size=camera.resolution)zip]]
# allow the camera to warmuptime[[Datei:OpencvWorkshopOpticalFlow.sleep(1)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.
print(<pre>import numpy as npimport cv2import cv2.__version__)aruco as aruco
# params for ShiTomasi corner detectionfeature_params cap = dictcv2.VideoCapture( maxCorners = 100,0) qualityLevel aruco_dict = 0aruco.3,Dictionary_get(aruco.DICT_6X6_250) minDistance parameters = 7, blockSize = 7 aruco.DetectorParameters_create()
# Parameters for lucas kanade optical flowwhile(True):lk_params ret, frame = dictcap.read( winSize ) gray = cv2.cvtColor(15frame,15cv2.COLOR_BGR2GRAY), maxLevel corners, ids, rejectedImgPoints = 2aruco.detectMarkers(gray,aruco_dict, parameters=parameters) criteria gray = (cv2aruco.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNTdrawDetectedMarkers(gray, 10corners, 0.03)ids)
# Create some random colorscolor mtx = np.random.randintarray([[5.3434144579284975e+02, 0.,2553.3915527836173959e+02],(100 [0.,35.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)
first_frame if ids != TrueNone: # 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))
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True): image = frame.array #ret, frame = frame frame_gray = cv2.cvtColorimshow(image'frame', cv2.COLOR_BGR2GRAYgray) if first_frame: # Take first frame and find corners in it old_gray = frame_gray.copy() p0 = cv2.goodFeaturesToTrackwaitKey(old_gray, mask = None, **feature_params) # Create a mask image for drawing purposes mask = np.zeros_like(old_gray) # print(old_gray) first_frame = False    # calculate optical flow p1, st, err = cv2.calcOpticalFlowPyrLK(old_gray, frame_gray, p0, None, **lk_params)  # Select good points good_new = p1[st==1] good_old = p0[st==1]  # draw the tracks for i,(new,old) in enumerate(zip(good_new,good_old)): a,b & 0xFF = new.ravel() c,d = old.ravel() mask = cv2.line(mask, (a,b),(c,d), color[i].tolist(), 2) frame = cv2.circle(frame_gray,(a,b),5,color[i].tolist(),-1) img = cv2.add(frame_gray,mask) # print(img) cv2.imshoword('frameq',img) k = cv2.waitKey(30) & 0xff if k == 27:
break
rawCapture.truncate(0)
 
# Now update the previous frame and previous points
old_gray = frame_gray.copy()
p0 = good_new.reshape(-1,1,2)
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
camera.close()
</pre>
  [[Datei:OpencvWorkshopOpticalFlowArUco_PoseEstimation.jpgpng|400px]]
1.932
Bearbeitungen