From CUVI Wiki

Detecting interesting parts of an image is an important step in most computer vision applications. Itserves as the first low-level processing step in applications like image segmentation, object recognition, object tracking and motion estimation. CUVI offers feature detectors including KLT, Harris and Peter in a single function


CuviStatus goodFeaturesToTrack(const CuviImage& src,
                               const CuviRect& roi,
                               CuviPointValue2D<Cuvi32f,Cuvi32f>*& output,
                               Cuvi32s& maxFeatures,
                               const CuviFeaturesCriteria criteria = CuviFeaturesCriteria(),
                               const CuviStream& stream = CuviStream());


Name Type Description
src const CuviImage& Input 8 bit Gray Scale Image.
roi const CuviRect& Desired region of interest of input image. The function will return features from only that region of the image
output CuviPointValue2D<Cuvi32f,Cuvi32f>*& Output feature list that contains the coordinates & values of features/corners.
maxFeatures Cuvi32s& Desired number of features. If the total features detected in the image or ROI are less than maxFeatures its value is updated to that number
criteria const CuviFeaturesCriteria A structure containing various parameters that affect feature selection behavior
stream const CuviStream& GPU stream ID for execution

Image Type Support

Input Output
8uC1 CuviPointValue2D<Cuvi32f,Cuvi32f>


Input Image

Selected Features


//Create an 8-bit Grays-scale CuviImage
CuviImage gpu_image = cuvi::io::loadImage(path,CUVI_LOAD_IMAGE_GRAYSCALE);

CuviPointValue2D<Cuvi32f,Cuvi32f> *features;

//Desired number of features
int featureCount = 100;

//Selecting complete image for the process
CuviRect roi(0,0,img.width(),img.height());

//Setting Feature selection parameters
CuviFeaturesCriteria criteria(CUVI_FEATURES_HARRIS_PETER,0.006f,15,3,-2.0f);

//Calling GoodFeaturesToTrack