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