OpenCV Feature Detector – 2

Here is another way to use the feature detectors. Instead of using the general FeatureDetector interface, here each feature-detector class is called individually and the associated functions are called.


int main(int argc, char* argv[]){
 cv::VideoCapture cam("D:/Pictures/20120811_140513.mp4");
 cv::Mat frames;
 cv::Mat grayIm;
 double FPS=0.;
 double FPS_sum = 0.;
 int FPS_count = 0;
 long prevTick = 0;
 int count = 0;
 char str[256] ={'\0'};

std::vector<cv::KeyPoint> keyp;

if(!cam.isOpened())
 return -1;

cam>>frames;
 grayIm.create(frames.rows,frames.cols,frames.type());

cv::SURF detector;

while(cv::waitKey(1)!=27){
 cam>>frames;
 cv::resize(frames,frames,cv::Size(),0.5,0.5);
 cv::cvtColor(frames,grayIm,CV_RGB2GRAY);

detector.detect(grayIm,keyp);

for(int i=0;i<keyp.size();i++)
 cv::circle(frames,cv::Point(keyp[i].pt.x,keyp[i].pt.y),2,cv::Scalar(255,0,0,255));

if(count==0){
 int currenttick = cv::getTickCount();
 FPS = cv::getTickFrequency()/(currenttick - prevTick)*30;
 if(FPS_count!=0) FPS_sum += FPS;
 FPS_count++;
 prevTick = cv::getTickCount();
 }
 count = ++count % 30;

sprintf(str,"FPS = %0.2f\0",FPS);
 cv::putText(frames,str,cv::Point(20,50),CV_FONT_HERSHEY_SIMPLEX,1,cv::Scalar(255,0,255,0));

cv::imshow("Camera",frames);
 cout<<"Average FPS = "<<FPS_sum/(FPS_count-1)<<std::endl;
 }
 return 0;
}

Input and platform: same as the previous one

Results:

Name FPS
FREAK 31.6729 – Does Not Track Anything
GFTTDetector Extremely slow – one frame takes about a minute
MSER 1.299
SIFT (in Nonfree Module) 1.637
SURF (in Nonfree Module) 0.981
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s