Jak w pełni zakończyć działanie programu?

0

Mam taki kod (wzorowałem się na kursie):

#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 ){
/* Pobranie klatki */
if(!cvGrabFrame(capture)){
std::cout << "Nie udało się pobrać klatki z kamery "<<std::endl;
exit(-1);
}
img=cvRetrieveFrame(capture);
/* Edytowanie orginalnego obrazka */
cvLine(img, cvPoint(x,y), srodek, cvScalar(255,255,0), 5);
cvRectangle(img, cvPoint(100,100), cvPoint(200,200), cvScalar(255,0,0), 1);
/* Okno widoku */
cvShowImage( "View", img );
/* Okno negacji */
if(window){
negatyw( img );
cvPutText ( img,"Test negacji",cvPoint(200,105), &font, cvScalar(255,255,0) );
cvShowImage ( "Negatyw", img );
}
/* Wyjście */
if(cvWaitKey(5) == 'q'){ //jeżeli wciśnięto Q
std::cout <<"Wyjście\n";
exit( 0 );

}
}
}

Chcę by po wciśnięciu 'q' aplikacja wyłączała się w pełni tzn. żeby konsola również się wyłączyła, co robić? :)

0
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 ){
/* Pobranie klatki */
if(!cvGrabFrame(capture)){
std::cout << "Nie udało się pobrać klatki z kamery "<<std::endl;
exit(-1);
}
img=cvRetrieveFrame(capture);
/* Edytowanie orginalnego obrazka */
cvLine(img, cvPoint(x,y), srodek, cvScalar(255,255,0), 5);
cvRectangle(img, cvPoint(100,100), cvPoint(200,200), cvScalar(255,0,0), 1);
/* Okno widoku */
cvShowImage( "View", img );
/* Okno negacji */
if(window){
negatyw( img );
cvPutText ( img,"Test negacji",cvPoint(200,105), &font, cvScalar(255,255,0) );
cvShowImage ( "Negatyw", img );
}
/* Wyjście */
if(cvWaitKey(5) == 'q'){ //jeżeli wciśnięto Q
std::cout <<"Wyjście\n";
exit( 0 );

}
}
}

Sam nie wiem, czy mam się śmiać, czy martwić widząc taki kod.
Sformatuj go :P

0
 #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 ){
        /* Pobranie klatki */
        if(!cvGrabFrame(capture)){
            std::cout << "Nie udało się pobrać klatki z kamery "<<std::endl;
            exit(-1);
        }
        img=cvRetrieveFrame(capture);
        /* Edytowanie orginalnego obrazka */
        cvLine(img, cvPoint(x,y), srodek, cvScalar(255,255,0), 5);
        cvRectangle(img, cvPoint(100,100), cvPoint(200,200), cvScalar(255,0,0), 1);
        /* Okno widoku */
        cvShowImage( "View", img );
        /* Okno negacji */
        if(window){
            negatyw( img );
            cvPutText ( img,"Test negacji",cvPoint(200,105), &font, cvScalar(255,255,0) );
            cvShowImage ( "Negatyw", img );
        }
        /* Wyjście */
        if(cvWaitKey(5) == 'q'){ //jeżeli wciśnięto Q
            std::cout <<"Wyjście\n";
            exit( 0 );

        }
    }
}

Już poprawiłem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0