ich zur Zeit zwei Maus-Callback-Funktionen haben beide getrennte Dinge zu tunVerwendung einzelne oder mehrere mousecallback für verschiedene Mausoperationen in einem einzigen opencv Fenstern
// Function to choose midpoint of a circle
static void onMouse(int event, int x, int y, int, void*)
{
//Detect Mouse button event
if(event == EVENT_LBUTTONDOWN)
{
//store point clicked
}
}
den zweiten Rückruf zieht eine Linie von einem Punkt auf dem Fenster, während der angeklickt linke Maustaste auf den Punkt gedrückt gehalten wird, an den es veröffentlicht hat
// Draws a line from the beginning of a point to another.
// This line is the diameter of a circle
// The first point isn't the coordinates stored by onMouse
static void DrawLine(int event, int x, int y, int, void*)
{
switch (event)
{
case EVENT_LBUTTONDOWN:
// start point
case EVENT_LBUTTONUP:
//endpoint
break;
case EVENT_MOUSEMOVE:
if(clicked)
{
// store point
}
break;
default : break;
}
}
Wie rufe ich jede Funktion jeweils in der angegebenen Reihenfolge. dh laufen OnMouse Rückruf erste und die laufen DrawLine Callback-Funktion
Main()
{
setMouseCallback("WinName", onMouse, 0);
setMouseCallback("WinName", DrawLine, 0);
// capture first frame of video
cap >> frame;
// set midpoint when onMouse is called
// set coordinates of the line when DrawLine is called
while (true)
{
cap >> frame;
// do the rest of your stuff here
}
}
das war meine ursprüngliche Idee auf Tastendruck basiert. Ich hatte gehofft, dass es eine eingebaute opencv-Funktion geben würde, um mit dieser – MaskedAfrican
genau was zu tun? – Miki
Ich habe mich entschieden, stattdessen diese Methode zu verwenden. Weniger unordentlich. – MaskedAfrican