Trix Temat założony przez niniejszego użytkownika |
[OpenCV]Pełne zakończenie programu » 2011-11-11 12:47:00 Wzorując się na przykładzie napisałem program pokazujący obraz z kamerki + jej negatyw. Po kliknięciu 'q' apliakcja powinna się wyłączyć, tak się nie dzieje gdyż okno co prawda się wyłącza lecz konsola pozostaje nienaruszona i proces dalej jest aktywny. Co powinienem zrobić w takiej sytuacji? Jak w ogóle pozbyć się tej konsoli? Kod: #include "opencv/cv.h" #include "opencv/highgui.h" #include <stdio.h>
#pragma comment(lib, "opencv_highgui231d.lib") #pragma comment(lib, "opencv_core231d.lib")
int x, y; bool window = false; CvFont font; void negatyw( IplImage * image ) { int s, w, k; for( s = 0; s < image->width; s++ ) for( w = 0; w < image->height; w++ ) for( k = 0; k < image->nChannels; k++ ) image->imageData [ w * image->widthStep + s * image->nChannels + k ] = 255 - image->imageData [ w * image->widthStep + s * image->nChannels + k ]; } void mouse( int event, int _x, int _y, int flags, void * parm ) { switch( event ) { case CV_EVENT_LBUTTONUP: std::cout << "Wciśnięto lewy przycisk myszy na pozycji [ " << _x << ',' << _y << " ]\n"; if( _x > 100 && _x < 200 && _y > 100 && _y < 200 ) { window =!window; if( window ) cvNamedWindow( "Negatyw" ); else cvDestroyWindow( "Negatyw" ); } break; case CV_EVENT_MOUSEMOVE: x = _x; y = _y; } } int main( int argc, char * argv[] ) { IplImage * img; cvInitFont( & font, CV_FONT_HERSHEY_COMPLEX_SMALL | CV_FONT_ITALIC, 1, 1, 0, 2 ); CvCapture * capture = cvCaptureFromCAM( 0 ); cvNamedWindow( "View" ); cvSetMouseCallback( "View", mouse, NULL ); if( !capture ) { std::cout << "kamera nie istnieje " << std::endl; exit( - 1 ); } if( !cvGrabFrame( capture ) ) { std::cout << "Nie udało się pobrać klatki z kamery" << std::endl; exit( - 1 ); } img = cvRetrieveFrame( capture ); CvPoint srodek = cvPoint( img->width / 2, img->height / 2 ); while( 1 ) { if( !cvGrabFrame( capture ) ) { std::cout << "Nie udało się pobrać klatki z kamery " << std::endl; exit( - 1 ); } img = cvRetrieveFrame( capture ); cvLine( img, cvPoint( x, y ), srodek, cvScalar( 255, 255, 0 ), 5 ); cvRectangle( img, cvPoint( 100, 100 ), cvPoint( 200, 200 ), cvScalar( 255, 0, 0 ), 1 ); cvShowImage( "View", img ); if( window ) { negatyw( img ); cvPutText( img, "Test negacji", cvPoint( 200, 105 ), & font, cvScalar( 255, 255, 0 ) ); cvShowImage( "Negatyw", img ); } if( cvWaitKey( 5 ) == 'q' ) { std::cout << "Wyjście\n"; exit( 0 ); } } }
|
|
DejaVu |
» 2011-11-11 13:01:01 NIGDY nie używaj funkcji exit aby zakończyć program. |
|
Trix Temat założony przez niniejszego użytkownika |
» 2011-11-11 13:21:12 Ale to czego użyć? Bo z returnem to samo się dzieje, konsola pozostaje nienaruszona |
|
DejaVu |
» 2011-11-11 13:25:47 |
|
Drraven |
» 2011-11-11 13:28:32 Piotr mnie wyprzedził :( Próbowałeś: throw - 1; |
|
Trix Temat założony przez niniejszego użytkownika |
» 2011-11-11 13:44:54 Sprawdziłem te przykłady i one dobrze działają, tak się zastanawiam, a może to jest powodem: Po skompilowaniu kodu i wciśnięciu f5 (start programu) wyświetla mi się takie coś: A potem to: Ale aplikacja działa poprawnie. |
|
DejaVu |
» 2011-11-11 14:11:35 int _tmain( int argc, _TCHAR * argv[] ) { cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE ); cvWaitKey( 0 ); cvDestroyWindow( "Example1" ); return 0; } |
|
Trix Temat założony przez niniejszego użytkownika |
» 2011-11-11 18:41:15 @UP Jeśli miałeś na myśli by dodać to: cvDestroyWindow( "View" ); Przed return 0; to niestety muszę zmartwić bo nadal nic się nie zmieniło :|
I co oznaczają te błędy? |
|
« 1 » 2 |