From aaffa57083d35349a573dd03e5f5f905da2b69d9 Mon Sep 17 00:00:00 2001 From: mutantturkey Date: Fri, 3 Aug 2012 14:34:17 -0400 Subject: inital commit of the FlyTrackingMain rewrite utilizng the OpenCV and CvBlob libraries --- fly-tools/fly-tracker/main.cpp | 127 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 fly-tools/fly-tracker/main.cpp (limited to 'fly-tools/fly-tracker') diff --git a/fly-tools/fly-tracker/main.cpp b/fly-tools/fly-tracker/main.cpp new file mode 100644 index 0000000..dab81b3 --- /dev/null +++ b/fly-tools/fly-tracker/main.cpp @@ -0,0 +1,127 @@ +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace cvb; + +ofstream nullLog; +ostream* output; + +bool cmpArea(const pair &p1, const pair &p2) +{ + return p1.second->area < p2.second->area; +} + +int main(int argc, char* argv[]) { + + int c; + + bool verbose = false; + + string usage = "fly-tracker -i -o -t -n "; + + string inputFileName; + string outputFolderName; + + int setNumber; + bool setNumberSet; + string setType; + + CvBlobs blobs; + CvBlobs largeBlobs; + + IplImage *inputImg; + IplImage *outputImg; + IplImage *labelImg; + + vector< pair > blobList; + + while ((c = getopt (argc, argv, "i:o:t:n:hv")) != -1) + switch (c) { + case 'i': + inputFileName = optarg; + break; + case 'o': + outputFolderName = optarg; + break; + case 'v': + verbose = true; + break; + case 't': + setType = optarg; + break; + case 'n': + setNumberSet = true; + setNumber = atoi(optarg); + break; + case 'h': + cout << usage << endl; + exit(EXIT_SUCCESS); + break; + default: + break; + } + + if ( inputFileName.empty() || outputFolderName.empty() || !setNumberSet || setType.empty() ) { + cerr << usage << endl; + exit(EXIT_FAILURE); + } + + (verbose) ? output = &cout : output = &nullLog; + + *output << "Verbose logging enabled" << endl; + + // read input file + + ifstream inputFile(inputFileName.c_str()); + + if (inputFile.fail() ) { + cerr << "cannot open the input file that contains name of the input images\n"; + exit(EXIT_FAILURE); + } + + string fileName; + int fileNumber; + bool togetherState = false; + + while (inputFile>>fileName) { + + IplImage *inputImg, *outputImg, *labelImg; + inputImg = cvLoadImage(fileName.c_str(), CV_LOAD_IMAGE_GRAYSCALE); + + CvBlobs blobs; + + vector< pair > blobList; + + // label blobs + labelImg = cvCreateImage(cvGetSize(inputImg),IPL_DEPTH_LABEL,1); + + cvLabel(inputImg, labelImg, blobs); + + // copy and sort blobs + copy(blobs.begin(), blobs.end(), back_inserter(blobList)); + sort(blobList.begin(), blobList.end(), cmpArea); + + (blobList.size() == 1) ? togetherState = true : togetherState = false; + + // List detected blob in each file + *output << "File: " << fileName << endl; + *output << "\t Together:" << togetherState << endl; + for (int i=0; i<(int)blobList.size(); i++) { + *output << "\t Blob #" << blobList[i].first << " -> " << (*blobList[i].second) << endl; + } + + + // Release all the memory + cvReleaseImage(&labelImg); + cvReleaseImage(&inputImg); + cvReleaseBlobs(blobs); + + } + + return 0; +} -- cgit v1.2.3