Using the Vitis vision Library

This section describes using the Vitis vision library in the Vitis development environment.

Note: The instructions in this section assume that you have downloaded and installed all the required packages.

include folder constitutes all the necessary components to build a Computer Vision or Image Processing pipeline using the library. The folders common and core contain the infrastructure that the library functions need for basic functions, Mat class, and macros. The library functions are categorized into 4 folders, features, video, dnn, and imgproc based on the operation they perform. The names of the folders are self-explanatory.

To work with the library functions, you need to include the path to the the include folder in the Vitis project. You can include relevant header files for the library functions you will be working with after you source the include folder’s path to the compiler. For example, if you would like to work with Harris Corner Detector and Bilateral Filter, you must use the following lines in the host code:

#include “features/xf_harris.hpp” //for Harris Corner Detector
#include “imgproc/xf_bilateral_filter.hpp” //for Bilateral Filter
#include “video/xf_kalmanfilter.hpp”

After the headers are included, you can work with the library functions as described in the Vitis vision Library API Reference using the examples in the examples folder as reference.

The following table gives the name of the header file, including the folder name, which contains the library function.

Table : Vitis Vision Library
Function Name File Path in the include folder
xf::cv::accumulate imgproc/xf_accumulate_image.hpp
xf::cv::accumulateSquare imgproc/xf_accumulate_squared.hpp
xf::cv::accumulateWeighted imgproc/xf_accumulate_weighted.hp p
xf::cv::absdiff, xf::cv::add, xf::cv::subtract, xf::cv::bitwise_and, xf::cv::bitwise_or, xf::cv::bitwise_not, xf::cv::bitwise_xor,xf::cv::multiply ,xf::cv::Max, xf::cv::Min,xf::cv::compare, xf::cv::zero, xf::cv::addS, xf::cv::SubS, xf::cv::SubRS ,xf::cv::compareS, xf::cv::MaxS, xf::cv::MinS, xf::cv::set core/xf_arithm.hpp
xf::cv::addWeighted imgproc/xf_add_weighted.hpp
xf::cv::autowhitebalance imgproc/xf_autowhitebalance.hpp
xf::cv::bilateralFilter imgproc/xf_histogram.hpp
xf::cv::boxFilter imgproc/xf_box_filter.hpp
xf::cv::boundingbox imgproc/xf_boundingbox.hpp
xf::cv::badpixelcorrection imgproc/xf_bpc.hpp
xf::cv::Canny imgproc/xf_canny.hpp
xf::cv::Colordetect imgproc/xf_colorthresholding.hpp, imgproc/xf_bgr2hsv.hpp, imgproc/xf_erosion.hpp, imgproc/xf_dilation.hpp
xf::cv::merge imgproc/xf_channel_combine.hpp
xf::cv::extractChannel imgproc/xf_channel_extract.hpp
xf::cv::convertTo imgproc/xf_convert_bitdepth.hpp
xf::cv::crop imgproc/xf_crop.hpp
xf::cv::filter2D imgproc/xf_custom_convolution.hpp
xf::cv::nv122iyuv, xf::cv::nv122rgba, xf::cv::nv122yuv4, xf::cv::nv212iyuv, xf::cv::nv212rgba, xf::cv::nv212yuv4, xf::cv::rgba2yuv4, xf::cv::rgba2iyuv, xf::cv::rgba2nv12, xf::cv::rgba2nv21, xf::cv::uyvy2iyuv, xf::cv::uyvy2nv12, xf::cv::uyvy2rgba, xf::cv::yuyv2iyuv, xf::cv::yuyv2nv12, xf::cv::yuyv2rgba, xf::cv::rgb2iyuv,xf::cv::rgb2nv12, xf::cv::rgb2nv21, xf::cv::rgb2yuv4, xf::cv::rgb2uyvy, xf::cv::rgb2yuyv, xf::cv::rgb2bgr, xf::cv::bgr2uyvy, xf::cv::bgr2yuyv, xf::cv::bgr2rgb, xf::cv::bgr2nv12, xf::cv::bgr2nv21, xf::cv::iyuv2nv12, xf::cv::iyuv2rgba, xf::cv::iyuv2rgb, xf::cv::iyuv2yuv4, xf::cv::nv122uyvy, xf::cv::nv122yuyv, xf::cv::nv122nv21, xf::cv::nv212rgb, xf::cv::nv212bgr, xf::cv::nv212uyvy, xf::cv::nv212yuyv, xf::cv::nv212nv12, xf::cv::uyvy2rgb, xf::cv::uyvy2bgr, xf::cv::uyvy2yuyv, xf::cv::yuyv2rgb, xf::cv::yuyv2bgr, xf::cv::yuyv2uyvy, xf::cv::rgb2gray, xf::cv::bgr2gray, xf::cv::gray2rgb, xf::cv::gray2bgr, xf::cv::rgb2xyz, xf::cv::bgr2xyz… imgproc/xf_cvt_color.hpp
xf::cv::dilate imgproc/xf_dilation.hpp
xf::cv::demosaicing imgproc/xf_demosaicing.hpp
xf::cv::erode imgproc/xf_erosion.hpp
xf::cv::fast features/xf_fast.hpp
xf::cv::GaussianBlur imgproc/xf_gaussian_filter.hpp
xf::cv::gaincontrol imgproc/xf_gaincontrol.hpp
xf::cv::gammacorrection imgproc/xf_gammacorrection
xf::cv::cornerHarris features/xf_harris.hpp
xf::cv::calcHist imgproc/xf_histogram.hpp
xf::cv::equalizeHist imgproc/xf_hist_equalize.hpp
xf::cv::HOGDescriptor imgproc/xf_hog_descriptor.hpp
xf::cv::Houghlines imgproc/xf_houghlines.hpp
xf::cv::inRange imgproc/xf_inrange.hpp
xf::cv::integralImage imgproc/xf_integral_image.hpp
xf::cv::densePyrOpticalFlow video/xf_pyr_dense_optical_flow.h pp
xf::cv::DenseNonPyrLKOpticalFlow video/xf_dense_npyr_optical_flow. hpp
xf::cv::LUT imgproc/xf_lut.hpp
xf::cv::KalmanFilter video/xf_kalmanfilter.hpp
xf::cv::magnitude core/xf_magnitude.hpp
xf::cv::MeanShift imgproc/xf_mean_shift.hpp
xf::cv::meanStdDev core/xf_mean_stddev.hpp
xf::cv::medianBlur imgproc/xf_median_blur.hpp
xf::cv::minMaxLoc core/xf_min_max_loc.hpp
xf::cv::OtsuThreshold imgproc/xf_otsuthreshold.hpp
xf::cv::phase core/xf_phase.hpp
xf::cv::preProcess dnn/xf_pre_process.hpp
xf::cv::paintmask imgproc/xf_paintmask.hpp
xf::cv::pyrDown imgproc/xf_pyr_down.hpp
xf::cv::pyrUp imgproc/xf_pyr_up.hpp
xf::cv::reduce imgrpoc/xf_reduce.hpp
xf::cv::remap imgproc/xf_remap.hpp
xf::cv::resize imgproc/xf_resize.hpp
xf::cv::convertScaleAbs imgproc/xf_convertscaleabs.hpp
xf::cv::Scharr imgproc/xf_scharr.hpp
xf::cv::SemiGlobalBM imgproc/xf_sgbm.hpp
xf::cv::Sobel imgproc/xf_sobel.hpp
xf::cv::StereoPipeline imgproc/xf_stereo_pipeline.hpp
xf::cv::sum imgproc/xf_sum.hpp
xf::cv::StereoBM imgproc/xf_stereoBM.hpp
xf::cv::SVM imgproc/xf_svm.hpp
xf::cv::Threshold imgproc/xf_threshold.hpp
xf::cv::warpTransform imgproc/xf_warp_transform.hpp

Changing the Hardware Kernel Configuration

Update the <path to vitis vision git folder>/vision/L1/examples/<function>/build/xf_config_params.h file.

Using the Vitis vision Library Functions on Hardware

The following table lists the Vitis vision library functions and the command to run the respective examples on hardware. It is assumed that your design is completely built and the board has booted up correctly.

Table : Using the Vitis vision Library Function on Hardware
Example Function Name Usage on Hardware
accumulate xf::cv::accumulate ./<executable name>.elf <path to input image 1> <path to input image 2>
accumulatesq uared xf::cv::accumulateSquare ./<executable name>.elf <path to input image 1> <path to input image 2>
accumulatewe ighted xf::cv::accumulateWeighted ./<executable name>.elf <path to input image 1> <path to input image 2>
addS xf::cv::addS ./<executable name>.elf <path to input image>
arithm xf::cv::absdiff, xf::cv::subtract, xf::cv::bitwise_and, xf::cv::bitwise_or, xf::cv::bitwise_not, xf::cv::bitwise_xor ./<executable name>.elf <path to input image 1> <path to input image 2>
addweighted xf::cv::addWeighted ./<executable name>.elf <path to input image 1> <path to input image 2>
Autowhite balance xf::cv::autowhitebalance ./<executable name>.elf <path to input image>
Bilateralfil ter xf::cv::bilateralFilter ./<executable name>.elf <path to input image>
Boxfilter xf::cv::boxFilter ./<executable name>.elf <path to input image>
Badpixelcorr ection xf::cv::badpixelcorrection ./<executable name>.elf <path to input image>
Boundingbox xf::cv::boundingbox ./<executable name>.elf <path to input image> <No of ROI’s>
Canny xf::cv::Canny ./<executable name>.elf <path to input image>
channelcombi ne xf::cv::merge ./<executable name>.elf <path to input image 1> <path to input image 2> <path to input image 3> <path to input image 4>
Channelextra ct xf::cv::extractChannel ./<executable name>.elf <path to input image>
Colordetect xf::cv::bgr2hsv, xf::cv::colorthresholding, xf::cv:: erode, xf::cv:: dilate ./<executable name>.elf <path to input image>
compare xf::cv::compare ./<executable name>.elf <path to input image 1> <path to input image 2>
compareS xf::cv::compareS ./<executable name>.elf <path to input image>
Convertbitde pth xf::cv::convertTo ./<executable name>.elf <path to input image>
convertScale Abs xf::cv::convertScaleAbs ./<executable name>.elf <path to input image>
Cornertracke r xf::cv::cornerTracker ./exe <input video> <no. of frames> <Harris Threshold> <No. of frames after which Harris Corners are Reset>
crop xf::cv::crop ./<executable name>.elf <path to input image>
Customconv xf::cv::filter2D ./<executable name>.elf <path to input image>
cvtcolor IYUV2NV12 xf::cv::iyuv2nv12 ./<executable name>.elf <path to input image 1> <path to input image 2> <path to input image 3>
cvtcolor IYUV2RGBA xf::cv::iyuv2rgba ./<executable name>.elf <path to input image 1> <path to input image 2> <path to input image 3>
cvtcolor IYUV2YUV4 xf::cv::iyuv2yuv4 ./<executable name>.elf <path to input image 1> <path to input image 2> <path to input image 3> <path to input image 4> <path to input image 5> <path to input image 6>
cvtcolor NV122IYUV xf::cv::nv122iyuv ./<executable name>.elf <path to input image 1> <path to input image 2>
cvtcolor NV122RGBA xf::cv::nv122rgba ./<executable name>.elf <path to input image 1> <path to input image 2>
cvtcolor NV122YUV4 xf::cv::nv122yuv4 ./<executable name>.elf <path to input image 1> <path to input image 2>
cvtcolor NV212IYUV xf::cv::nv212iyuv ./<executable name>.elf <path to input image 1> <path to input image 2>
cvtcolor NV212RGBA xf::cv::nv212rgba ./<executable name>.elf <path to input image 1> <path to input image 2>
cvtcolor NV212YUV4 xf::cv::nv212yuv4 ./<executable name>.elf <path to input image 1> <path to input image 2>
cvtcolor RGBA2YUV4 xf::cv::rgba2yuv4 ./<executable name>.elf <path to input image>
cvtcolor RGBA2IYUV xf::cv::rgba2iyuv ./<executable name>.elf <path to input image>
cvtcolor RGBA2NV12 xf::cv::rgba2nv12 ./<executable name>.elf <path to input image>
cvtcolor RGBA2NV21 xf::cv::rgba2nv21 ./<executable name>.elf <path to input image>
cvtcolor UYVY2IYUV xf::cv::uyvy2iyuv ./<executable name>.elf <path to input image>
cvtcolor UYVY2NV12 xf::cv::uyvy2nv12 ./<executable name>.elf <path to input image>
cvtcolor UYVY2RGBA xf::cv::uyvy2rgba ./<executable name>.elf <path to input image>
cvtcolor YUYV2IYUV xf::cv::yuyv2iyuv ./<executable name>.elf <path to input image>
cvtcolor YUYV2NV12 xf::cv::yuyv2nv12 ./<executable name>.elf <path to input image>
cvtcolor YUYV2RGBA xf::cv::yuyv2rgba ./<executable name>.elf <path to input image>
Demosaicing xf::cv::demosaicing ./<executable name>.elf <path to input image>
Difference of Gaussian xf::cv::GaussianBlur, xf::cv::duplicateMat, and xf::cv::subtract ./<exe-name>.elf <path to input image>
Dilation xf::cv::dilate ./<executable name>.elf <path to input image>
Erosion xf::cv::erode ./<executable name>.elf <path to input image>
Fast xf::cv::fast ./<executable name>.elf <path to input image>
Gaussianfilt er xf::cv::GaussianBlur ./<executable name>.elf <path to input image>
Gaincontrol xf::cv::gaincontrol ./<executable name>.elf <path to input image>
Gammacorrec tion xf::cv::gammacorrection ./<executable name>.elf <path to input image>
Harris xf::cv::cornerHarris ./<executable name>.elf <path to input image>
Histogram xf::cv::calcHist ./<executable name>.elf <path to input image>
Histequializ e xf::cv::equalizeHist ./<executable name>.elf <path to input image>
Hog xf::cv::HOGDescriptor ./<executable name>.elf <path to input image>
Houghlines xf::cv::HoughLines ./<executable name>.elf <path to input image>
inRange xf::cv::inRange ./<executable name>.elf <path to input image>
Integralimg xf::cv::integralImage ./<executable name>.elf <path to input image>
Lkdensepyrof xf::cv::densePyrOpticalFlo w ./<executable name>.elf <path to input image 1> <path to input image 2>
Lknpyroflow xf::cv::DenseNonPyr LKOpticalFlow ./<executable name>.elf <path to input image 1> <path to input image 2>
Lut xf::cv::LUT ./<executable name>.elf <path to input image>
Kalman Filter xf::cv::KalmanFilter ./<executable name>.elf
Magnitude xf::cv::magnitude ./<executable name>.elf <path to input image>
Max xf::cv::Max ./<executable name>.elf <path to input image 1> <path to input image 2>
MaxS xf::cv::MaxS ./<executable name>.elf <path to input image>
meanshifttra cking xf::cv::MeanShift ./<executable name>.elf <path to input video/input image files> <Number of objects to track>
meanstddev xf::cv::meanStdDev ./<executable name>.elf <path to input image>
medianblur xf::cv::medianBlur ./<executable name>.elf <path to input image>
Min xf::cv::Min ./<executable name>.elf <path to input image 1> <path to input image 2>
MinS xf::cv::MinS ./<executable name>.elf <path to input image>
Minmaxloc xf::cv::minMaxLoc ./<executable name>.elf <path to input image>
otsuthreshol d xf::cv::OtsuThreshold ./<executable name>.elf <path to input image>
paintmask xf::cv::paintmask ./<executable name>.elf <path to input image>
Phase xf::cv::phase ./<executable name>.elf <path to input image>
Pyrdown xf::cv::pyrDown ./<executable name>.elf <path to input image>
Pyrup xf::cv::pyrUp ./<executable name>.elf <path to input image>
reduce xf::cv::reduce ./<executable name>.elf <path to input image>
remap xf::cv::remap ./<executable name>.elf <path to input image> <path to mapx data> <path to mapy data>
Resize xf::cv::resize ./<executable name>.elf <path to input image>
scharrfilter xf::cv::Scharr ./<executable name>.elf <path to input image>
set xf::cv::set ./<executable name>.elf <path to input image>
SemiGlobalBM xf::cv::SemiGlobalBM ./<executable name>.elf <path to left image> <path to right image>
sobelfilter xf::cv::Sobel ./<executable name>.elf <path to input image>
stereopipeli ne xf::cv::StereoPipeline ./<executable name>.elf <path to left image> <path to right image>
stereolbm xf::cv::StereoBM ./<executable name>.elf <path to left image> <path to right image>
subRS xf::cv::SubRS ./<executable name>.elf <path to input image>
subS xf::cv::SubS ./<executable name>.elf <path to input image>
sum xf::cv::sum ./<executable name>.elf <path to input image 1> <path to input image 2>
Svm xf::cv::SVM ./<executable name>.elf
threshold xf::cv::Threshold ./<executable name>.elf <path to input image>
warptransfor m xf::cv::warpTransform ./<executable name>.elf <path to input image>
zero xf::cv::zero ./<executable name>.elf <path to input image>