opencv が円を検出した後にシェル スクリプト (1.sh など) を実行するにはどうすればよいですか?
私はexecを使用しましたが、動作しますが、円が検出された後にopencvプログラムが閉じます.「q」キーを押すまでプログラムが閉じないことが必要です。
これが私のコードです:
#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;
}
ubuntuでコードブロックを使用しました。