コード例 #1
0
ファイル: ObjectTracking.cpp プロジェクト: Hedog/AVPRG
//Diese Funktion erstellt 3 Fenster und 8 Trackbars
void ObjectTracking::setWindowSettings(){

	namedWindow("Kalibrierung",1);
	namedWindow("Farbe1",1);
	//namedWindow("Trackfenster",1);
	namedWindow("Farbe2",1);

	moveWindow("Farbe1",800,50);
	moveWindow("Farbe2",800,50);
	moveWindow("Kalibrierung",50,50);

	cvCreateTrackbar("LowerH", "Farbe1", &lowerH, 180, NULL);
	cvCreateTrackbar("UpperH", "Farbe1", &upperH, 180, NULL);

	cvCreateTrackbar("LowerS", "Farbe1", &lowerS, 256, NULL);
	cvCreateTrackbar("UpperS", "Farbe1", &upperS, 256, NULL);

	cvCreateTrackbar("LowerV", "Farbe1", &lowerV, 256, NULL);
	cvCreateTrackbar("UpperV", "Farbe1", &upperV, 256, NULL);

	cvCreateTrackbar("LowerH2", "Farbe2", &lowerH2, 180, NULL);
	cvCreateTrackbar("UpperH2", "Farbe2", &upperH2, 180, NULL);

	cvCreateTrackbar("LowerS2", "Farbe2", &lowerS2, 256, NULL);
	cvCreateTrackbar("UpperS2", "Farbe2", &upperS2, 256, NULL);

	cvCreateTrackbar("LowerV2", "Farbe2", &lowerV2, 256, NULL);
	cvCreateTrackbar("UpperV2", "Farbe2", &upperV2, 256, NULL); 

	cvCreateTrackbar("rectangleSizeH", "Kalibrierung", &rHeight, 100, NULL);  
	cvCreateTrackbar("rectangleSizeW", "Kalibrierung", &rWidth, 100, NULL);

	setTrackbarPos("rectangleSizeH", "Kalibrierung", 50);
	setTrackbarPos("rectangleSizeW", "Kalibrierung", 50);
}
コード例 #2
0
ファイル: image.cpp プロジェクト: xuweirong/SkizLib
void skizImage::TestVideo()
{
	string fileName("/home/xuweirong/video/kakumeiki.mp4");
	VideoCapture cap(fileName);
	if(!cap.isOpened())
	    printf("cap is not open\n");
	namedWindow("video");
	ShowAllVideoProperty( cap) ;
	int slider =0 ;
	namedWindow("Trackbar");
    int maxSecond = (int) (cap.get(CV_CAP_PROP_FRAME_COUNT)/cap.get(CV_CAP_PROP_FPS))  ;
	createTrackbar("TrackbarName","Trackbar",&slider,maxSecond,OnTimeSlider,&cap);
	while(1) 
	{
		Mat frame;
		cap>>frame ;
		FrameMessage(cap);
		int pos = (int) (cap.get(CV_CAP_PROP_POS_MSEC) /1000.0) ;
		setTrackbarPos("TrackbarName","Trackbar",pos);
		//cvtColor(frame,frame,CV_BGR2GRAY);
		imshow("video",frame);
		if(waitKey(30)>=0) 
			break;
	}
}
コード例 #3
0
ファイル: MyPlayer.cpp プロジェクト: Domiii/smart-video-2013
	void Player::nextFrame(){
		if(nowFrameNumber<frameNumber-1){
			//nowFrameNumber++;
			setTrackbarPos("Frame", "Weight", nowFrameNumber+1);
		}
		else{
			cout << "the last frame" << endl;
		}
	}
コード例 #4
0
ファイル: MyPlayer.cpp プロジェクト: Domiii/smart-video-2013
	void Player::initPlayer(ClipEntry& clipEntry)
    {
		this->clipEntry = &clipEntry;
        clipMaskFileNames = ReadLines(Config.GetForegroundFolder(clipEntry));

		frameNumber = clipEntry.GetFrameCount();
		cout << "frameNumber: " << frameNumber << endl;
		startFrameNumber = 0;
		nowFrameNumber = 0;
		waitKeyNumber = 32;
		nowSequenceNumber = 0;

		weightPath = Config.GetWeightsPath(clipEntry);
		weightW = 1000;
		weightH = 200;

		sequencePath = Config.GetSequencePath(clipEntry);
		initWeight();
		initSequence();

		namedWindow("Display", CV_WINDOW_AUTOSIZE);
		namedWindow("Foreground", CV_WINDOW_AUTOSIZE);
		namedWindow("Weight", CV_WINDOW_AUTOSIZE);
		createTrackbar("Frame", "Weight", 0, frameNumber-1, changeBar, (void*)this);
		setTrackbarPos("Frame", "Weight", nowFrameNumber);
		createTrackbar("Speed", "Weight", 0, 6, changeSpeed, (void*)this);
		setTrackbarPos("Speed", "Weight", 3);

		
		if(clipEntry.Type == ClipType::Video){
			Mat frame;
			int num = 11;

			while(num--)
				clipEntry.Video.read(frame);
		}
		

		showFrame(s[0],1);

		loop();
		
	}
コード例 #5
0
ファイル: MyPlayer.cpp プロジェクト: Domiii/smart-video-2013
	void Player::nextSequence(){
		if(nowSequenceNumber<sequenceNumber-1){
			nowSequenceNumber++;
			//nowFrameNumber = s[nowSequenceNumber];
			setTrackbarPos("Frame", "Weight", s[nowSequenceNumber]);
		}
		else{
			cout << "the last frame" << endl;
		}
	}
コード例 #6
0
ファイル: guiContrast.cpp プロジェクト: ArtisticCoding/OpenCP
	void guiContrast(InputArray src_)
	{
		string window_name = "contrast";
		Mat src = src_.getMat();
		namedWindow(window_name);
		int a = 10;
		int b = 0;
		cv::createTrackbar("a/10", window_name, &a, 1024);
		cv::createTrackbar("b", window_name, &b, 256);
		int key = 0;
		cv::Mat show;
		while (key != 'q')
		{
			show = a / 10.0*src + b;
			imshow(window_name, show);
			key = waitKey(33);

			if (key == 'l')
			{
				a--;
				setTrackbarPos("a/10", window_name, a);
			}
			if (key == 'j')
			{
				a++;
				setTrackbarPos("a/10", window_name, a);
			}
			if (key == 'i')
			{
				b++;
				setTrackbarPos("b", window_name, b);
			}
			if (key == 'k')
			{
				b--;
				setTrackbarPos("b", window_name, b);
			}
		}
		destroyWindow(window_name);
	}
コード例 #7
0
void guiAlphaBlend(const Mat& src1, const Mat& src2)
{
	Mat s1,s2;
	if(src1.channels()==1)cvtColor(src1,s1,CV_GRAY2BGR);
	else s1 = src1;
	if(src2.channels()==1)cvtColor(src2,s2,CV_GRAY2BGR);
	else s2 = src2;
	namedWindow("alphaBlend");
	int a = 0;
	createTrackbar("a","alphaBlend",&a,100);
	int key = 0;
	Mat show;
	while(key!='q')
	{
		addWeighted(s1,1.0-a/100.0,s2,a/100.0,0.0,show);
		imshow("alphaBlend",show);
		key = waitKey(1);
		if(key=='f')
		{
			a = (a > 0) ? 0 : 100;
			setTrackbarPos("a","alphaBlend",a);
		}
	}
}
コード例 #8
0
// callback do mouse para calibragem de cor (Johnathan)
void Calibration::callbackMouseClickColor(int evt, int x, int y, int flags, void* param){
	if(evt == CV_EVENT_LBUTTONDOWN){
		// staticInputImage está em HSV e staticInputImage2 está em RGB
		Vec3b p = staticInputImage.at<Vec3b>(y,x);
		Vec3b p2 = staticInput2Image.at<Vec3b>(y,x);
		
		/*	
			- Pega o valor do HSV do click, adiciona uma porcentagem para cima para ser o limite superior
			e retira uma porcentagem para ser o limite inferior do intervalo de cor
		*/
		int hMin = (int)p[0]*0.8;
		int sMin = (int)p[1]*0.6;
		int vMin = (int)p[2]*0.6;
		int hMax = (int)p[0]*1.2;
		int sMax = (int)p[1]*1.4;
		int vMax = (int)p[2]*1.4;

		/* Guarda o valor em RGB do click */
		staticColor.rgb[r] = (int)p2[2];
		staticColor.rgb[g] = (int)p2[1];
		staticColor.rgb[b] = (int)p2[0];

		// Pega os valores de HSV Max e Min criados com o click e atualiza as trackbars
		staticVisionColorHelper[0] = hMin;
		staticVisionColorHelper[1] = sMin;
		staticVisionColorHelper[2] = vMin;

		staticVisionColorHelper[3] = hMax;
		staticVisionColorHelper[4] = sMax;
		staticVisionColorHelper[5] = vMax;

		setTrackbarPos("HMin", "values", staticVisionColorHelper[0]);
		setTrackbarPos("HMax", "values", staticVisionColorHelper[3]);

		setTrackbarPos("SMin", "values", staticVisionColorHelper[1]);
		setTrackbarPos("SMax", "values", staticVisionColorHelper[4]);

		setTrackbarPos("VMin", "values", staticVisionColorHelper[2]);
		setTrackbarPos("VMax", "values", staticVisionColorHelper[5]);
	}
}
コード例 #9
0
ファイル: zoom.cpp プロジェクト: DerThorsten/OpenCP
void guiZoom(InputArray src, OutputArray dst)
{
	const int width = src.size().width;
	const int height = src.size().height;

	string wname = "Zoom";
	namedWindow(wname);
	int th=1;
	//Point mpt = Point(width/2, height/2);
	Point mpt = Point(410, 230);
	int d = 40; 
	int z = 7;

	createTrackbar("x", wname,&mpt.x, width-1);
	createTrackbar("y", wname,&mpt.y, height-1);
	createTrackbar("d", wname,&d, min(width,height)-1);
	createTrackbar("zoom", wname,&z, 20);
	int key = 0;

	setMouseCallback(wname,onMouse,&mpt);
	
	Mat dest;
	Mat input = src.getMat();

	int mode = 0;
	while(key!='q')
	{
		input.copyTo(dest);
		z = max(z,1);

		Rect rct = Rect(mpt.x, mpt.y, d,d);
		Scalar color = Scalar(0,0,255);
		int thick = 2;

		rectangle(dest, rct, color, thick);

		Mat crop;
		dest(rct).copyTo(crop);
		Mat res;
		resize(crop,res, Size(z*d,z*d), 0,0, INTER_NEAREST);
		
		if(res.cols <= dest.cols && res.rows <= dest.rows)
		{
			if(mode==0) res.copyTo(dest(Rect(0, 0 ,res.size().width, res.size().height)));
			else if(mode==1) res.copyTo(dest(Rect(dest.cols-1-res.size().width, 0, res.size().width, res.size().height)));
			else if(mode==2) res.copyTo(dest(Rect(dest.cols-1-res.size().width, dest.rows-1-res.size().height, res.size().width, res.size().height)));
			else if(mode==3) res.copyTo(dest(Rect(0, dest.rows-1-res.size().height, res.size().width, res.size().height)));
		}

		imshow(wname,dest);
		key = waitKey(1);

		setTrackbarPos("x",wname,mpt.x);
		setTrackbarPos("y",wname,mpt.y);
		if(key=='r')
		{
			mode++;
			if(mode>4) mode=0;
		}
		if(key=='s')
		{
			imwrite("out.png", dest);
		}
	}

	dest.copyTo(dst);
	destroyWindow(wname);
}
コード例 #10
0
ファイル: ObjectTracking.cpp プロジェクト: Hedog/AVPRG
void ObjectTracking::update()
{
	//überprüfen ob eine Gegenstandsfarbe kalibriert wurde, wenn nicht voreingestellte Werte nehmen
	if(!farbe)
	{

		hueLower = 180;
		hue2 = 0;
		saturationLower = 255;
		saturationUpper = 0;
		valueLower = 255;
		valueUpper = 0;

	}
	Mat frame;	//Kamerabild
	Mat frameHSV;//Kamerbild in HSV Farben


	cap >> frame; // neues frame von der Kamera abrufen
	GaussianBlur(frame,frame,Size(7,7),3,3); // Bild mit Gaussian Blur Filter glätten
	cvtColor(frame, frameHSV,  CV_BGR2HSV); //Kameraframe von BGR Farben in HSV Farben umwandeln


	//Eckpunkte des Kalibrierungsfeldes setzen
	Point upperleft((frame.cols/2)-rHeight,(frame.rows/2)-rWidth);
	Point downright((frame.cols/2)+rHeight,(frame.rows/2)+rWidth);

	//solange keine Farbe kalibriert wurde oder wenn "j" für die kalibrierung gedrückt wurde wird ein Rotes Rechteck angezeigt


	//Abfragen der "j" Taste für das Kalibrierungfeld
	v = cvWaitKey(1);

	if((char)v==106 ){

		kalibrierung = true;

	}

	if(!farbe || kalibrierung)
	{

		rectangle(frame,upperleft,downright,Scalar(0,0,255),2);

	}
	//Wenn "k" gedrückt wird, dann werden die Farben aus dem roten Rechteck zur Erkennung des Gegenstandes gesetzt

	c = cvWaitKey(1);

	if((char)c==107 && kalibrierung == true)
	{ 
		cout << Gegenstand << endl;
		hueLower = 180;
		hue2 = 0;
		saturationLower = 255;
		saturationUpper = 0;
		valueLower = 255;
		valueUpper = 0;
		farbe = true;
		kalibrierung = false;

		//verschachtelte for-Schleife läuft alle Pixel im roten Rechteck durch und ermittel die Höchsten und Niedrigsten Werte im Feld um die Schwarz-Weiß Maske zu setzen
		for(int y = upperleft.y+1; y < downright.y; y++)
		{

			for(int x = upperleft.x+1; x < downright.x; x++)
			{				

				if(hueLower > frameHSV.at<Vec3b>(y,x)[0])
				{
					if(Gegenstand == 1){
						hueLower = frameHSV.at<Vec3b>(y,x)[0];
						setTrackbarPos("LowerH", "Farbe1", hueLower);
					}
					if(Gegenstand == 2){
						hueLower = frameHSV.at<Vec3b>(y,x)[0];
						setTrackbarPos("LowerH2", "Farbe2", hueLower);
					}
				}

				if(hue2 < frameHSV.at<Vec3b>(y,x)[0])
				{	
					if(Gegenstand == 1){
						hue2 = frameHSV.at<Vec3b>(y,x)[0];
						setTrackbarPos("UpperH", "Farbe1", hue2);
					}
					if(Gegenstand == 2){
						hue2 = frameHSV.at<Vec3b>(y,x)[0];
						setTrackbarPos("UpperH2", "Farbe2", hue2);
					}

				}

				if(saturationLower > frameHSV.at<Vec3b>(y,x)[1])
				{	
					if(Gegenstand == 1){
						saturationLower = frameHSV.at<Vec3b>(y,x)[1];
						setTrackbarPos("LowerS", "Farbe1", saturationLower);
					}
					if(Gegenstand == 2){
						saturationLower = frameHSV.at<Vec3b>(y,x)[1];
						setTrackbarPos("LowerS2", "Farbe2", saturationLower);
					}
				}

				if(saturationUpper < frameHSV.at<Vec3b>(y,x)[1])
				{	
					if(Gegenstand == 1){
						saturationUpper = frameHSV.at<Vec3b>(y,x)[1];
						setTrackbarPos("UpperS", "Farbe1", saturationUpper);
					}
					if(Gegenstand == 2){
						saturationUpper = frameHSV.at<Vec3b>(y,x)[1];
						setTrackbarPos("UpperS2", "Farbe2", saturationUpper);
					}
				}

				if(valueLower > frameHSV.at<Vec3b>(y,x)[2])
				{	
					if(Gegenstand == 1){
						valueLower = frameHSV.at<Vec3b>(y,x)[2];
						setTrackbarPos("LowerV", "Farbe1", valueLower);
					}
					if(Gegenstand == 2){
						valueLower = frameHSV.at<Vec3b>(y,x)[2];
						setTrackbarPos("LowerV2", "Farbe2", valueLower);
					}
				}

				if(valueUpper < frameHSV.at<Vec3b>(y,x)[2])
				{	
					if(Gegenstand == 1){
						valueUpper = frameHSV.at<Vec3b>(y,x)[2];
						setTrackbarPos("UpperV", "Farbe1", valueUpper);
					}
					if(Gegenstand == 2){
						valueUpper = frameHSV.at<Vec3b>(y,x)[2];
						setTrackbarPos("UpperV2", "Farbe2", valueUpper);
					}
				}	

				if(Gegenstand == 3){
					Gegenstand = 0;
				}
			}				
		}Gegenstand ++;
	}



	//Erstellen der Schwarz-Weiß-Maske anhand der gesetzten Unter-/Oberwerte
	inRange(frameHSV, Scalar(lowerH,lowerS,lowerV), Scalar(upperH,upperS,upperV), swmaske);


	//Erstellen der Schwar-Weiß-Maske anhand der gesetzten Unter-/Oberwerte
	inRange(frameHSV, Scalar(lowerH2,lowerS2,lowerV2), Scalar(upperH2,upperS2,upperV2), swmaske2);


	//ermitteln des Mittelpunktes der weißen Pixel
	Xzähler = 1;
	Yzähler = 1;
	Xmittel = 0;
	Ymittel = 0;
	Xzähler2 = 1;
	Yzähler2 = 1;
	Xmittel2 = 0;
	Ymittel2 = 0;

	for(int y = 0 ; y < frame.rows ; y++)
	{

		for(int x = 0; x<frame.cols; x++)
		{

			if(swmaske.at<uchar>(y,x) == 255)
			{			 
				Xmittel +=x;
				Xzähler ++;
				Ymittel += y;
				Yzähler ++;
			}
			if(swmaske2.at<uchar>(y,x) == 255)
			{			 
				Xmittel2 +=x;
				Xzähler2 ++;
				Ymittel2 += y;
				Yzähler2 ++;
			}
		}
	}

	// Mittelwert für X und Y ausrechnen
	Xmittel = Xmittel/Xzähler;
	Ymittel = Ymittel/Yzähler;
	Xmittel2 = Xmittel2/Xzähler2;
	Ymittel2 = Ymittel2/Yzähler2;

	//Trackpfad im Bild "tracking" zeichnen
	line(tracking, Point(Xmittelalt,Ymittelalt), Point(Xmittel,Ymittel), Scalar(0,255,255),1);
	circle(tracking, Point(Xmittel,Ymittel) , 1, Scalar(0,0,255),1);
	line(tracking, Point(Xmittelalt2,Ymittelalt2), Point(Xmittel2,Ymittel2), Scalar(255,0,0),1);
	circle(tracking, Point(Xmittel2,Ymittel2) , 1, Scalar(255,0,255),1);

	Xmittelalt = Xmittel;
	Ymittelalt = Ymittel;	
	Xmittelalt2 = Xmittel2;
	Ymittelalt2 = Ymittel2;


	int range = 50;

	//Bilder anzeigen
	imshow("Kalibrierung",frame);
	imshow("Farbe1",swmaske);
	imshow("Farbe2",swmaske2);
	//Trackingfenster nur zum Überprüfen des Trackingpfades
	//imshow("fenster3",tracking);

}
コード例 #11
0
ファイル: robovideo.cpp プロジェクト: mlaidma/Robosome
vector<vector<double>> calibrator(CvCapture* cap){

	// Ball Threshold values
	int h_min, s_min, v_min, h_max, s_max, v_max, write, variablecount,getconfig;

	namedWindow("Thresh");
	namedWindow("Thresitud");
	Mat frame;
	vector<Mat> frames;
	vector<double> ball;
	vector<double> goal;
	vector<double> lines;
	vector<int> *arrptr;
	bool onlyonce = true;
	vector<vector<double>> values;

	string filename = "config.txt";
	string variable;
	string line_from_config;
	ofstream fout;
	ifstream fin;
	vector<string> line;
	variablecount = 1;

	fin.open(filename);

	getconfig = 0;
	write = 0;
	h_min = 0;
    s_min = 0;
    v_min = 0;
	h_max = 255,
	s_max = 255;
	v_max = 255;

	createTrackbar( "H min", "Thresh", &h_min, SLIDER_MAX, NULL);
	createTrackbar( "H max", "Thresh", &h_max, SLIDER_MAX, NULL);
	createTrackbar( "S min", "Thresh", &s_min, SLIDER_MAX, NULL);
	createTrackbar( "S max", "Thresh", &s_max, SLIDER_MAX, NULL);
	createTrackbar( "V min", "Thresh", &v_min, SLIDER_MAX, NULL);
	createTrackbar( "V max", "Thresh", &v_max, SLIDER_MAX, NULL);
	// WRITE to file
	createTrackbar("WRITE", "Thresh", &write, 1, NULL);
	createTrackbar("QUIT CONFIG", "Thresh", &getconfig, 1, NULL);

	cout<< "Enne ifi" << endl;

	if (fin.is_open())
	{
		cout << "IF" << endl;
		getline(fin,line_from_config);
		while (line_from_config != "")
		{
			cout<<"WHILE"<<endl;
			line = split(line_from_config, " ");
			if (line[0] == "Ball"){
				for (int i = 1; i < line.size(); i++){
					ball.push_back(atoi(line[i].c_str()));
					cout<<line[i]<<endl;
				}
			}

			else if (line[0] == "Goal"){
				for (int i = 1; i < line.size(); i++){
					goal.push_back(atoi(line[i].c_str()));
					cout<<line[i]<<endl;
				}
			}

			else if (line[0] == "Lines"){
				for (int i = 1; i < line.size(); i++){
					lines.push_back(atoi(line[i].c_str()));
					cout<<line[i]<<endl;
				}
			}
			else
			{
				break;
			}



			getline(fin,line_from_config);
		}
		values.push_back(ball);
		values.push_back(goal);
		values.push_back(lines);

	}
	else
	{
		cout<<"File is empty or not opened"<<endl;
	}

	while (true){

	if (write == 1)	{

		if (onlyonce)
		{
			fout.open(filename);
			values.clear();
			onlyonce = false;
		}


		if(variablecount == 1){
			variable = "Ball";
			ball.push_back(h_min);
			ball.push_back(s_min);
			ball.push_back(v_min);
			ball.push_back(h_max);
			ball.push_back(s_max);
			ball.push_back(v_max);
			values.push_back(ball);

		}
		else if(variablecount == 2){
			variable = "Goal";
			goal.push_back(h_min);
			goal.push_back(s_min);
			goal.push_back(v_min);
			goal.push_back(h_max);
			goal.push_back(s_max);
			goal.push_back(v_max);
			values.push_back(goal);

		}
		else if(variablecount == 3){
			variable = "Lines";
			lines.push_back(h_min);
			lines.push_back(s_min);
			lines.push_back(v_min);
			lines.push_back(h_max);
			lines.push_back(s_max);
			lines.push_back(v_max);
			values.push_back(lines);
		}


		fout << variable << " " << h_min << " " << s_min <<
			" " << v_min << " "  << h_max << " " << s_max <<
			" " << v_max << endl;

		cout <<  variable << " " << h_min << " " << s_min <<
			" " << v_min << " "  << h_max << " " << s_max <<
			" " << v_max << endl;

		variablecount = variablecount +1;

		h_min = 0;
		s_min = 0;
		v_min = 0;
		h_max = 255,
		s_max = 255;
		v_max = 255;
		write = 0;


		setTrackbarPos("H min", "Thresh", h_min);
		setTrackbarPos("S min", "Thresh", s_min);
		setTrackbarPos("V min", "Thresh", v_min);
		setTrackbarPos("H max", "Thresh", h_max);
		setTrackbarPos("S max", "Thresh", s_max);
		setTrackbarPos("V max", "Thresh", v_max);
		setTrackbarPos("WRITE", "Thresh", write);
	}

	if (getconfig == 1)
	{

	}


	// take a frame, threshold it, display the thresholded image
	frame = cvQueryFrame( cap );
	frames = thresholder(frame,h_min, s_min, v_min, h_max, s_max, v_max ); // added values as argument, previously h_min, s_min ....

	imshow("Thresh", frames[0]);
	imshow("CALIBRATOR", frames[0]);



	int c = cvWaitKey(10);
	if( (char)c == 27) {
    cvDestroyAllWindows();
    return values;
	}

	}

}