int main(int argc, char **argv) { if (argc != 2) { exit(1); } signal(SIGINT, intHandler); std::string arg = argv[1]; cv::VideoCapture capture(arg); //try to open string, this will attempt if (!capture.isOpened()) //if this fails, try to open as a video camera capture.open(atoi(arg.c_str())); if (!capture.isOpened()) { std::cerr << "Failed to open a video device or video file!\n" << std::endl; return 1; } ImageProcessor *ip = new HSV_Region_Processor_Min_Alloc(capture); BotController *bt = new BotController(); Region *dp; cv::Mat frame; ip->initialiseWindow(); std::vector<Region *> *regionList; while (keepRunning) { capture >> frame; ip->cleanRegionList(); regionList = ip->processFrame(frame); std::sort(regionList->begin(), regionList->end(), compareBySize); dp = (*regionList)[0]; if (dp != NULL && dp->getSize() > 100) { double angle = ip->angle(frame, *dp); double distance = ip->distance(frame, *dp); std::cout << angle << " - " << distance << std::endl; bt->move(angle, distance); ip->drawArrow(frame, angle, distance); //ip->saveFrame(frame); } else { std::cout << "No object found, sitting still" << std::endl; bt->stop(); } ip->drawFrame(frame); cv::waitKey(5); // ip->processKeys(frame); } std::cout << "Shutting down" << std::endl; bt->stop(); }
void VisionWindow::updateClicked(int xIdx, int yIdx, int buttonIdx){ if(!initialized_) return; int image = currentBigImageCam_; ImageProcessor* processor = getImageProcessor(image); unsigned char* colorTable = processor->getColorTable(); const ImageParams& iparams = processor->getImageParams(); if (doingCalibration_) { Sample s; s.x = xIdx; s.y = yIdx; if(image == IMAGE_TOP) s.camera = Camera::TOP; else s.camera = Camera::BOTTOM; emit calibrationSampleAdded(s); redrawImages(); } if (doingClassification_) { if (buttonIdx == Qt::LeftButton) { //for(int i=0; i < LUT_SIZE; i++) //std::cout << colorTable[i] << "\,"; //std::cout << "DONE\n"; memcpy(tempTable,colorTable,LUT_SIZE); ColorTableMethods::xy2yuv(processor->getImg(), xIdx, yIdx, iparams.width, currentY_, currentU_, currentV_); updateTable(colorTable, currentY_, currentU_, currentV_); //for(int i=0; i < LUT_SIZE; i++) //std::cout << tempTable[i] << "\,"; //sstd::cout << "\n"; colorUpdateAvailable_ = true; redrawImages(); processor->processFrame(); memcpy(colorTable,tempTable,LUT_SIZE); } else if (buttonIdx == Qt::RightButton && colorUpdateAvailable_) { memcpy(undoTable, colorTable, LUT_SIZE); undoImage_ = image; updateTable(colorTable, currentY_, currentU_, currentV_); colorUpdateAvailable_ = false; redrawImages(); } } }