Comment exécuter un script shell (par exemple 1.sh) après que opencv ait détecté le cercle?Comment exécuter un script shell après opencv detect circle
J'ai utilisé exec, ça marche mais le programme opencv ferme après le cercle détecté, et ce que je veux, c'est que le programme ne s'est pas fermé avant d'appuyer sur la touche "q".
Voici mon code:
#include<cv.h>
#include<highgui.h>
#include <math.h>
#include <stdlib.h>
#include <unistd.h>
using namespace std;
int main(int argc, char **argv)
{
CvCapture *capture = 0;
IplImage *img = 0;
int key = 0;
CvFont font;
cvInitFont(&font, CV_FONT_HERSHEY_PLAIN,1.0,1.0,0,1,CV_AA);
capture = cvCaptureFromCAM(0);
if (!capture) {
fprintf(stderr, "Cannot open initialize webcam!\n");
return 1;
}
cvNamedWindow("result", CV_WINDOW_AUTOSIZE);
img = cvQueryFrame(capture);
if (!img)
exit(1);
IplImage* gray = cvCreateImage(cvGetSize(img), 8, 1);
CvMemStorage* storage = cvCreateMemStorage(0);
while(key != 'q') {
img = cvQueryFrame(capture);
if(!img) break;
cvCvtColor(img, gray, CV_BGR2GRAY);
cvSmooth(gray, gray, CV_GAUSSIAN, 5, 5);
CvSeq* circles = cvHoughCircles(gray, storage, CV_HOUGH_GRADIENT, 2, >gray->height/40, 200, 100/*, 20, 100*/);
int i;
for(i = 0; i < circles->total; i++)
{
float* p = (float*)cvGetSeqElem(circles, i);
cvCircle(img, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), >CV_RGB(50,255,30), 5, 8, 0);
cvPutText(img, "CIRCLE",cvPoint(cvRound(p[0]+45),cvRound(p[1]+45)), &font, >CV_RGB(50,10,255));
if (circles) {
execl("./1.sh", (char *)0);
}
}
cvShowImage("result", img);
cvShowImage("gray", gray);
key = cvWaitKey(1);
}
// cvReleaseMemStorage(storage);
// cvReleaseImage(gray);
cvDestroyAllWindows();
cvDestroyWindow("result");
cvReleaseCapture(&capture);
return 0;
}
J'utilisé codeblocks sur ubuntu.
cette question a été posée ici et il a été supprimé. – ArtemStorozhuk