//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); }
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; } }
void Player::nextFrame(){ if(nowFrameNumber<frameNumber-1){ //nowFrameNumber++; setTrackbarPos("Frame", "Weight", nowFrameNumber+1); } else{ cout << "the last frame" << endl; } }
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(); }
void Player::nextSequence(){ if(nowSequenceNumber<sequenceNumber-1){ nowSequenceNumber++; //nowFrameNumber = s[nowSequenceNumber]; setTrackbarPos("Frame", "Weight", s[nowSequenceNumber]); } else{ cout << "the last frame" << endl; } }
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); }
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); } } }
// 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]); } }
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); }
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); }
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; } } }