I cannot figure out how to properly access elements of a 3D cv::Mat array. The following code runs in Vivado HLS and fails with a non-descriptive error. Is this a problem with the Vivado HLS, or I am not properly reading values?
cv::Mat img = cv::Mat(cv::Size(100,100),CV_MAKETYPE(CV_8U,5)); // should create a 100x100x5 array
uchar x;
x = img.at<uchar>(0,0,0); // works fine when reading from third dimension at 0
x = img.at<uchar>(0,0,1); // fails when reading from third dimension at 1
Error:
@E Simulation failed: SIGSEGV.
ERROR: [SIM 211-100] CSim failed with errors.
Indeed there are some issues with
Mat::at<T>
when using multidimensional data. take a look at : Posti recommend accessing pixels directly without using
Mat::at<T>
:*Note : this is an easy way to access Mat but if you want efficiency use data pointer.