How to preform a convex Hull operation in C++

Hello, I am working on vision tracking right now and was wondering how to implement the Convex Hull operation seen in the white papers(ni vision assistant) into C++. If there is a function or combination of functions to do this I would appreciate it.

One function you could use would be
int imaqConvexHull(Image* dest, Image* source, int connectivity8);

It is documented in C:\Program Files\National Instruments\Vision\Documentation\NIVisionCVI.chm,
and the header file is I believe in nivision.h, and the library is probably nivision.out.

Greg McKaskle

Thank you could you be more specific on how to impliment that function for exaple would I say
image->imaqConvexHull(Image* dest, Image* source, int connectivity8);
obviously with diffrent names.

image->imaqConvexHull(Image* dest, Image* source, int connectivity8);

Close, but the vision calls are just C functions, not C++ methods. The function takes in two Image* params, one for the destination and one for the source. I’m not sure what type your image-> is, so I’m not sure if that is the appropriate type to pass in or not.

The Image* referenced above is expected to come from Image* imaqCreateImage(ImageType type, int borderSize); or similar calls to load or create an NI Image.

By the way, the PDF about CVI is also a good source of how to use the library. You may also find it useful to look at examples such as C:\Program Files\National Instruments\Vision\Examples\MSVC\Threshold And Label

Greg McKaskle

The current image type is not imaq image. But I think I know how to convert it. so asuming it was and I wanted to replace the current image with the result of the convex hull would I say.

image->imaqConvexHull(Image* image, Image* image, int connectivity8);

or

image->imaqConvexHull(image, image, connectivity 8);

do you know what connectivity 8 means?

The manual will explain it better, but the 4 versus 8 connectivity determines whether the diagonals on the pixels are considered as part of the particle. I think 8 is the better choice typically.

The usage is

int imaqConvexHull(Image* dest, Image* source, int connectivity8);

where Image* is the NI Image type. You need to convert or access inner buffer pointers or whatever the Image class is that you were using.

Greg McKaskle