2016-04-13 9 views

Antwort

1

Hier ist die Sache - Wenn wir ein kontinuierliches Video mit openCV Mat-Objekt streamen, zeigt es ein Bild nach dem anderen, damit die Informationen des n-ten Frames verloren gehen, wenn der (n + 1) -te Frame empfangen wird.

Was Sie brauchen, sind 2 Mat Objekte - eins, um die Kamera zu streamen (sagen Mat_cam), und das andere, um die Lasertrajektorie (Mat_traj) zu zeichnen. Mat_cam wird verwendet, um die Laserposition Bild für Bild zu verfolgen, unter Verwendung eines beliebigen Standard-Farbschwellenalgorithmus. Sogar das Video sagt, dass der Laser hell sein sollte, was bedeutet, dass jimez86 möglicherweise eine weiße Farbschwelle verwendet, gefolgt von der größten Flecklokalisierung.

Wenn eine neue Laserposition im n-ten Rahmen empfangen wird, zeichnen Sie einen entsprechenden Kreis auf Mat_traj. Wenn das nächste Frame empfangen wird, wird Mat_cam aktualisiert und es wird eine neue Laserposition haben, aber Mat_traj wird dasselbe sein, da es nicht mit jeder 'for' Schleifeniteration gelöscht/aufgefrischt wird, daher wird es das Ganze enthalten Flugbahn. Das Hinzufügen von Mat_traj und Mat_cam mit Gewichtetem Zusatz gibt Ihnen das gewünschte Ergebnis. Folgen Sie dem folgenden Algo:

Mat Mat_traj(640,480,CV_8UC1,Scalar(0)),Mat_cam,Mat_res; 
VideoCapture cam(0); 
for(;;) 
{ 
    cam>>Mat_cam; 
    Point laserCentre=getLaserCentre(Mat_cam);//you'll be defining this function; 
    drawCircle(Mat_traj,laserCentre); 
    addWeighted(Mat_cam,Mat_traj,other_params,Mat_res); 
    imshow("out",Mat_res); 
    waitKey(10); 
} 
+0

Was für eine brillante Antwort. Vielen Dank! – WheelPot