Let’s try to detect corner from an image.
In this sample, I am using my own picture = building.jpg.
You can edit the below source code and try to detect corner from different image.
I am implementing two types of function to detect corner :
1. cvCornerMinEigenVal
The function cvCornerMinEigenVal is to calculate and store the minimal eigen value of derivative covariation matrix for every pixel, i.e. min(λ1, λ2) in terms of the previous function.
2. cvCornerHarris
Harris edge detector. You can refer to the original paper = A Combined Corner and Edge Detector
You may also refer to the next article : click here (Harris Corner Detection).
Source code :
#include <stdio.h> #include <cv.h> #include <highgui.h> int main (void) { int i, corner_count = 150; IplImage *dst_img1, *dst_img2, *src_img_gray; IplImage *eig_img, *temp_img; CvPoint2D32f *corners; //image file char imagePath[256] = "c:\\images\\building.jpg"; printf("%s\n", imagePath); dst_img1 = cvLoadImage (imagePath, CV_LOAD_IMAGE_ANYCOLOR | CV_LOAD_IMAGE_ANYDEPTH); dst_img2 = cvCloneImage (dst_img1); src_img_gray = cvLoadImage (imagePath, CV_LOAD_IMAGE_GRAYSCALE); eig_img = cvCreateImage (cvGetSize (src_img_gray), IPL_DEPTH_32F, 1); temp_img = cvCreateImage (cvGetSize (src_img_gray), IPL_DEPTH_32F, 1); corners = (CvPoint2D32f *) cvAlloc (corner_count * sizeof (CvPoint2D32f)); // (1)Corner detection using cvCornerMinEigenVal cvGoodFeaturesToTrack (src_img_gray, eig_img, temp_img, corners, &corner_count, 0.1, 15); cvFindCornerSubPix (src_img_gray, corners, corner_count, cvSize (3, 3), cvSize (-1, -1), cvTermCriteria (CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.03)); // (2)Draw the detected corner for (i = 0; i < corner_count; i++) cvCircle (dst_img1, cvPointFrom32f (corners[i]), 3, CV_RGB (255, 0, 0), 2); //Message for debugging printf("MinEigenVal corner count = %d\n", corner_count); // (3)Corner detection using cvCornerHarris corner_count = 150; cvGoodFeaturesToTrack (src_img_gray, eig_img, temp_img, corners, &corner_count, 0.1, 15, NULL, 3, 1, 0.01); cvFindCornerSubPix (src_img_gray, corners, corner_count, cvSize (3, 3), cvSize (-1, -1), cvTermCriteria (CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.03)); // (4)Draw the detected corner for (i = 0; i < corner_count; i++) cvCircle (dst_img2, cvPointFrom32f (corners[i]), 3, CV_RGB (0, 0, 255), 2); //Message for debugging printf("Harris corner count = %d\n", corner_count); // (5)Display the result cvNamedWindow ("EigenVal", CV_WINDOW_AUTOSIZE); cvShowImage ("EigenVal", dst_img1); cvNamedWindow ("Harris", CV_WINDOW_AUTOSIZE); cvShowImage ("Harris", dst_img2); cvWaitKey (0); cvDestroyWindow ("EigenVal"); cvDestroyWindow ("Harris"); cvReleaseImage (&dst_img1); cvReleaseImage (&dst_img2); cvReleaseImage (&eig_img); cvReleaseImage (&temp_img); cvReleaseImage (&src_img_gray); return 0; }
Posted by umek1 on May 5, 2011 at 12:31 am
nice POST there.. thx b4.
umek, student ee at ITS surabaya 07
Posted by Harris Corner Detection « Catatan si Fahmi on November 11, 2011 at 12:09 pm
[…] You may refer the previous article : click here. […]
Posted by sachi on October 8, 2012 at 10:09 am
which editor I can use to run this code?? there is a problem if I use Codeblock….
Posted by fahmifahim on October 10, 2012 at 4:44 am
Thank you for the comment. I am using Microsoft Visual Studio 2008.
May I know what kind of error did you get from Codeblock?
Posted by mezguich med amine on December 8, 2012 at 6:29 am
bjr je suis un étudiant à esprit est mon PFE c’est la réalisation d’une application de reconnaissance de logo sous android , j’ai commencé a travailler avec neuroph studio mais la problème c’est que la base si elle construite je ne peux pas la modifié avez vous une idée sur la partie “reconnaissance” , cad après avoir détecter les points d’intérêt quelle est la phase suivantes et quelle sont les méthodes que je puisse les utilisées pour reconnaître l’image ou plus précisément le logo , merci d’avance
Posted by fahmifahim on December 8, 2012 at 6:56 am
Hello, thank you for the comment. But I am sorry, i don’t know French. Would you let me know your comment in English?
Posted by mezguich med amine on December 9, 2012 at 5:20 am
I’m sorry because yesterday before reading the page I did the conversion, and I forgot that it in English. so I am a student at “ESPRIT” ,and my PFE is the realization of applications for recognition of logo in android and it is a theme in this is the first time I work ,so you have an idea on the recognition that is to say after having detect points of interest what is now the next phase?What methods are used for recognition? please help me because I am lost thank you in advance
Posted by Medo Ziad on March 29, 2013 at 11:55 pm
if i want the upload image then apply the alogrthim >> how i do that ?
Posted by hana bouazizi on August 1, 2014 at 11:00 pm
hi
I need your help in the step using “opencv c++”: cut the video into shots using distance hist (i1, i2) ;this distance to calculate the intersection of color histograms gray levels of two frames i1 and i2 ;if this distance is greater than a threshold “S” we say that these two frames belong to two different shots…display these shots.
thanks
Posted by Naseemsheikh on January 19, 2017 at 10:00 am
can you please give me the code for video also