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